객체 지향 프로그래밍에서 getter와 setter는 객체의 속성(프로퍼티)을 접근하고 제어하는 데 사용되는 중요한 개념입니다. 마치 집의 문처럼, getter는 속성 값을 외부에서 안전하게 조회할 수 있도록 하고, setter는 속성 값을 외부에서 안전하게 변경할 수 있도록 합니다.
1. Getter란 무엇일까요?
Getter는 마치 집의 문구멍과 같습니다.
- 외부에서 객체의 속성 값을 엿볼 수 있도록 해줍니다.
- 마치 친구 방 문구멍을 통해 친구가 무엇을 하고 있는지 엿보는 것과 비슷합니다.
- 하지만, 문을 직접 열어 들어가는 것은 허용하지 않습니다.
Getter는 다음과 같이 정의됩니다.
class MyClass {
int _count = 0; // _로 시작하는 변수는 private 속성입니다.
int get count {
return _count;
}
}
위 코드에서 count getter는 _count라는 private 속성의 값을 반환합니다. 외부에서 MyClass 인스턴스의 count 속성에 접근하면 마치 문구멍을 통해 속성 값을 엿보는 것처럼 _count 값을 확인할 수 있습니다.
2. Setter란 무엇일까요?
Setter는 마치 집의 문과 같습니다.
- 외부에서 객체의 속성 값을 변경할 수 있도록 해줍니다.
- 마치 친구 방 문을 열고 들어가 친구에게 물건을 건네주는 것과 비슷합니다.
- 하지만, 마음대로 들어가는 것은 허용하지 않고, 규칙에 따라 물건만을 건네줄 수 있도록 제어합니다.
Setter는 다음과 같이 정의됩니다.
class MyClass {
int _count = 0;
void set count(int newCount) {
if (newCount >= 0) {
_count = newCount;
print("새로운 count 값: $newCount");
} else {
print("count는 0보다 작을 수 없습니다.");
}
}
}
위 코드에서 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
카카오톡 오픈 채팅방
'Flutter > Dart Language' 카테고리의 다른 글
Dart로 서버 개발하기 (0) | 2024.06.21 |
---|---|
Dart에서 static 키워드: 궁금증 해결 가이드 (0) | 2024.06.21 |
Dart에서 객체 지향 프로그래밍: 클래스와 객체 심화 가이드 (0) | 2024.06.21 |
Dart에서 재귀 함수의 성능 향상: 메모이제이션 기법 (0) | 2024.06.21 |
Dart에서 재귀 함수 활용하기: 심층 가이드 (0) | 2024.06.21 |