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를 쓰려고 하면 에러가 발생!