OOP에서 나오는 개념인 Getter와 Setter에 대해서 알아보려고 한다.
Getter → 값을 가져올 때
Setter → 값을 변경할 때
void main() {
Idol seulgi = new Idol(
name : '슬기',
group : '레드벨벳'
);
seulgi.sayName();
// _name과 name은 다름 (_name은 멤버변수, name은 getter의 변수명)
print(seulgi._name);
print(seulgi.name);
// setter
seulgi.name = 'hoo_dev';
print(seulgi.name);
}
class Idol {
// 변수명 앞에 _ 를 붙이면 private변수
// 자바같은 전통적인 OOP에선 클래스 안에서만 private변수를 가져올 수 있다.
// dart의 경우 특이하게 같은 파일에서 코드가 작성 됐을때만 private변수를 가져올 수 있다.
// 만약 main함수가 class랑 같은 파일에 있지 않다면 main에서 _name, _group를 가져올 수 없다.
// 만약 다른 파일에 있다면 어떻게 가져오는가? -> Getter와 Setter 사용
String _name;
String? _group;
Idol({
String? name,
String? group,
}) : this._name = name.toString(),
this._group = group;
void sayName() {
print('저는 ${this._name}입니다.');
}
// getter, setter와 타입을 일치시켜줘야함
String get name{
return this._name;
}
// setter는 무조건 한개의 parameter
set name(String name){
this._name = name;
}
}
그래서 왜 사용하는가?
- 일반 함수로 해당 값들을 가져오고 변경해도 기능적으로 차이는 없다.
- 보통 private변수를 변경 할 때 setter를 쓰긴 함.
- getter의 경우 객체의 무결성을 보장해줌
- 예를 들어 몸무게는 0보다 작을 수 없는데 외부에서 직접 접근해서 넣는다면 0보다 작은 값을 넣을 수가 있기 때문에 무결성을 깨트림
- getter는 그것을 한 번 검증해주므로 무결성을 깨지 않을 수 있음.
- setter는 지양하라고는 하는데 이유는 아직은 이해하기가 어렵다.. OOP 공부를 더 해야 할 듯..
'Flutter' 카테고리의 다른 글
[Flutter] API 요청하기 (0) | 2023.01.06 |
---|---|
[Flutter] TextField 위젯의 textAlignVertical 속성 (TextField 정렬) (0) | 2022.12.28 |
[Flutter] 하단바, 페이지 하단에 떠 있는 버튼 위젯(FloatingActionButton) (0) | 2022.12.27 |
[Flutter] Calendar 구현(table_calendar 오픈소스 활용) (0) | 2022.12.26 |
[Flutter] 비동기 프로그래밍 (Future, Stream, async, async*, yeild, yeild*) (0) | 2022.12.22 |