Getter & Setter

하요·2024년 7월 2일
0
post-thumbnail

Dart에서 데이터 캡슐화 구현하기: Getter & Setter

Dart에서 게터(Getter)와 세터(Setter)는 객체의 속성에 접근하고 수정하는 데 사용되는 특별한 메서드입니다. 이를 통해 캡슐화(Encapsulation)를 구현하고, 속성에 대한 접근을 제어할 수 있습니다.

주요 개념

  • 게터 (Getter): 객체의 속성 값을 반환하는 메서드입니다. 속성에 접근할 때 추가적인 로직을 실행할 수 있습니다.
  • 세터 (Setter): 객체의 속성 값을 설정하는 메서드입니다. 속성에 값을 할당할 때 유효성 검사를 포함한 추가 로직을 실행할 수 있습니다.

주요 사용 사례

  • 데이터 캡슐화: 속성을 보호하고, 속성 접근을 제어합니다.
  • 데이터 유효성 검사: 속성 값 설정 시 유효성 검사를 수행하여 무결성을 유지합니다.
  • 추가 로직 실행: 속성 값 접근 시 로그 기록 등 부가적인 작업을 수행합니다.

주요 활용도

  • 캡슐화: 객체의 내부 상태를 외부로부터 보호합니다.
  • 유효성 검사: 속성 값이 유효한지 확인하여 오류를 방지합니다.
  • 추가 로직: 속성 값 접근 및 설정 시 추가적인 로직을 실행합니다.

코드 예제

기본 게터와 세터 사용

class Person {
  String _name; // 비공개 변수

  // 생성자
  Person(this._name);

  // 게터
  String get name => _name;

  // 세터
  set name(String newName) {
    if (newName.isNotEmpty) {
      _name = newName;
    } else {
      throw ArgumentError('Name cannot be empty');
    }
  }
}

void main() {
  var person = Person('Alice');
  print(person.name); // Alice

  person.name = 'Bob';
  print(person.name); // Bob

  // person.name = ''; // 오류 발생
}

고급 예제: 읽기 및 수정 횟수 추적

class Document {
  String _content;
  int _readCount = 0;
  int _updateCount = 0;

  Document(this._content);

  String get content {
    _readCount += 1;
    return _content;
  }

  set content(String content) {
    _content = content;
    _updateCount += 1;
  }

  String get statistic => "readCount: $_readCount / updateCount: $_updateCount";
}

void main() {
  final doc = Document("Initial content");

  // 조회
  print(doc.content); // Initial content
  print(doc.statistic); // readCount: 1 / updateCount: 0

  // 수정
  doc.content = "Updated content";
  print(doc.statistic); // readCount: 1 / updateCount: 1
}

추가 팁

  • 캡슐화: 변수 앞에 _(언더바)를 붙여 비공개 변수로 선언하면 외부에서 직접 접근할 수 없습니다.
  • 유효성 검사: 세터에서 값 할당 전에 유효성 검사를 수행할 수 있습니다.
  • 추가 로직: 게터와 세터를 사용하여 속성 접근 시 로그 기록, 통계 증가 등의 추가 로직을 쉽게 구현할 수 있습니다.
profile
flutter 개발자(진)

0개의 댓글