Flutter

[Flutter, Dart] Getter, Setter 정의와 사용법

Hoo_Dev 2022. 12. 28. 11:20

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 공부를 더 해야 할 듯..