class의 field나 method의 이름 앞에 언더스코어(_)로 시작하면 private 맴버가 된다.
그런데 이때 private의 단위는 '클래스'가 아니라 '라이브러리(파일)' 단위이다.
다른 파일을 import를 해서는 참조하는 클래스의 _로 시작하는 private 맴버는 접근할 수 없지만,
같은 파일 내부에 정의 된 외부 클래스의 _로 시작하는 private 맵버는 접근가능하다.
Dart는 파일 하나를 하나의 독립된 라이브러리로 취급한다.
같은 파일 안에 정의된 클래스들은 서로 긴밀하게 협력하는 관계라고 보고, 자유롭게 접근을 허용하도록 하고 있다.
// person.dart 파일
class Person {
String name; // public (어디서든 접근 가능)
int _age; // private (이 파일 내부에서만 접근 가능)
Person(this.name, this._age);
}
void test() {
var p = Person("철수", 20);
print(p._age); // 같은 파일이라서 접근 가능!
}
만약 다른 파일에서 Person 객체를 만들어 p._age를 쓰려고 하면 에러가 발생!