dart에도 다른 언어와 비슷하게 getter와 setter 그리고 public 과 private가 존재합니다.
_
로 시작하면 private이 되고, 기본적으로는 모두 public입니다.
대표적으로 statefulWidget이 있습니다.
class MyWidget extends StatefulWidget {
const MyWidget({super.key});
State<MyWidget> createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
Widget build(BuildContext context) {
return const Placeholder();
}
}
위와 같은 위젯에서, MyWidget
은 public으로 어디서든 사용가능하지만, _MyWidgetState
는 이 파일내에서만 사용이 가능합니다.
private 변수인 _name은 직접 접근이 불가능하지만, public인 getter와 setter를 통해서 접근이 가능해집니다.
class Person{
String _name; // private로 외부에서 접근불가
String get name => _name;
set name(String name) => _name = name;
}
이러한 class를 사용할 때는 다음과 같이 사용할 수 있습니다.
main(){
Person person = Person();
person.name = 'test User'; // setter 사용
print(person.name); // getter 사용
}
위와 같은 상황에서는 getter와 setter의 필요성이 크게 느껴지지 않습니다. 하지만, 예외처리나 복잡한 변수인 경우 유용하게 사용할 수 있습니다. 예를 들어, name은 10글자 이하로만 변경할 수 있도록 하면,
class Person{
String _name; // private로 외부에서 접근불가
String get name => _name;
set name(String name) => (name.length>15) ? _name = 'too long' : _name = name ;
}
이 처럼, 예외처리를 할 수 있습니다.