객체의 속성 접근 및 제어: Getter와 Setter 완벽 가이드

2024. 6. 21. 15:52Flutter/Dart Language

반응형

객체 지향 프로그래밍에서 gettersetter는 객체의 속성(프로퍼티)을 접근하고 제어하는 데 사용되는 중요한 개념입니다. 마치 집의 문처럼, getter는 속성 값을 외부에서 안전하게 조회할 수 있도록 하고, setter는 속성 값을 외부에서 안전하게 변경할 수 있도록 합니다.

1. Getter란 무엇일까요?

Getter는 마치 집의 문구멍과 같습니다.

  • 외부에서 객체의 속성 값을 엿볼 수 있도록 해줍니다.
  • 마치 친구 방 문구멍을 통해 친구가 무엇을 하고 있는지 엿보는 것과 비슷합니다.
  • 하지만, 문을 직접 열어 들어가는 것은 허용하지 않습니다.

Getter는 다음과 같이 정의됩니다.

Dart
class MyClass {
  int _count = 0; // _로 시작하는 변수는 private 속성입니다.

  int get count {
    return _count;
  }
}
코드를 사용할 때는 주의가 필요합니다.
content_copy

위 코드에서 count getter는 _count라는 private 속성의 값을 반환합니다. 외부에서 MyClass 인스턴스의 count 속성에 접근하면 마치 문구멍을 통해 속성 값을 엿보는 것처럼 _count 값을 확인할 수 있습니다.

2. Setter란 무엇일까요?

Setter는 마치 집의 과 같습니다.

  • 외부에서 객체의 속성 값을 변경할 수 있도록 해줍니다.
  • 마치 친구 방 문을 열고 들어가 친구에게 물건을 건네주는 것과 비슷합니다.
  • 하지만, 마음대로 들어가는 것은 허용하지 않고, 규칙에 따라 물건만을 건네줄 수 있도록 제어합니다.

Setter는 다음과 같이 정의됩니다.

Dart
class MyClass {
  int _count = 0;

  void set count(int newCount) {
    if (newCount >= 0) {
      _count = newCount;
      print("새로운 count 값: $newCount");
    } else {
      print("count는 0보다 작을 수 없습니다.");
    }
  }
}
코드를 사용할 때는 주의가 필요합니다.
content_copy

위 코드에서 count setter는 _count라는 private 속성의 값을 newCount 매개변수로 전달받아 변경합니다. 외부에서 MyClass 인스턴스의 count 속성에 새로운 값을 할당하면 마치 문을 열고 물건을 건네주는 것처럼 _count 값을 변경할 수 있습니다. 하지만, setter는 newCount 값이 0보다 작지 않은지 검사하고 제어하여 부적절한 값이 설정되지 않도록 합니다.

3. Getter와 Setter를 사용하는 이유

  • 데이터 은닉: Getter와 Setter를 사용하면 객체의 내부 구현을 숨기고 외부에서 필요한 속성 값만을 안전하게 접근하고 제어할 수 있습니다. 마치 집 안의 모든 것을 보여주지 않고, 문을 통해 필요한 물건만을 주고받는 것과 같습니다.
  • 데이터 무결성 유지: Setter를 사용하면 속성 값을 변경할 때 유효성 검사 및 조작을 수행하여 데이터 무결성을 유지할 수 있습니다. 마치 집 안에 들어가는 사람을 선별하고, 규칙에 맞는 물건만을 건네주는 것과 같습니다.
  • 코드 가독성 향상: Getter와 Setter를 사용하면 코드를 더욱 명확하고 읽기 쉽게 만들 수 있습니다. 마치 문구멍과 문처럼 명확한 역할을 하는 코드를 통해 이해하기 쉬운 구조를 만들 수 있습니다.

4. Getter와 Setter 사용 예시

  • 은행 계좌 관리: BankAccount 클래스에서 balance 속성에 대한 getter와 setter를 사용하여 잔액 조회 및 입금/출금 기능을 구현할 수 있습니다.
  • 온라인 쇼핑몰: Product 클래스에서 price 속성에 대한 getter와 setter를 사용하여 상품 가격 조회 및 변경 기능을 구현할 수 있습니다.
  • 게임 캐릭터: Character 클래스에서 hp 속성에 대한 getter와 setter를 사용하여 체력 조회 및 감소/증가 기능을 구현할 수 있습니다.
  • 설정 관리: Settings 클래스에서 다양한 설정 값들을 저장하고, getter와 setter를 사용하여 설정 값 조회 및 변경 기능을 구현할 수 있습니다.
  •  

5. Getter와 Setter 사용 시 주의 사항

  • 명명 규칙: 일반적으로 getter는 속성 이름 그대로 사용하고, setter는 속성 이름에 =를 붙여 사용합니다. (예: getName, setName)
  • 접근 제어: getter와 setter의 접근 제어자를 적절하게 설정하여 데이터 보안을 강화해야 합니다. (예: public, private, protected)
  • 네이밍 충돌: getter와 setter 이름이 다른 메서드와 동일하면 오류가 발생할 수 있으므로 주의해야 합니다.

6. 더 알아보기

  • Dart 공식 문서 - Getter와 Setter
  • Effective Dart - Getter와 Setter

7. 맺음말

 

Getter와 Setter는 객체 지향 프로그래밍에서 매우 중요한 개념입니다.

데이터 은닉, 데이터 무결성 유지, 코드 가독성 향상 등 다양한 장점을 제공하며, 다양한 분야에서 활용됩니다.

이 블로그를 통해 Getter와 Setter에 대한 기본적인 개념과 사용법을 이해하셨기를 바랍니다.

더 깊이 배우고 싶으시다면 위에 소개된 자료들을 참고하시고, 실제 프로젝트에서 적용해보면서 실력을 향상시키시기 바랍니다.

 

 

수발가족을 위한 일기장 “나비일기장”

 

https://play.google.com/store/apps/details?id=com.maccrey.navi_diary_release

 

구글플레이 앱 배포의 시작! 비공개테스트 20명의 테스터모집을 위한 앱 "테스터 쉐어"

 

https://play.google.com/store/apps/details?id=com.maccrey.tester_share_release

 

Tester Share [테스터쉐어] - Google Play 앱

Tester Share로 Google Play 앱 등록을 단순화하세요.

play.google.com

카카오톡 오픈 채팅방

https://open.kakao.com/o/gsS8Jbzg

반응형