KoreanFoodie's Study
Effective C++ | 항목 22 : 데이터 멤버가 선언될 곳은 private 영역임을 명심하자 본문
Tutorials/C++ : Advanced
Effective C++ | 항목 22 : 데이터 멤버가 선언될 곳은 private 영역임을 명심하자
GoldGiver 2022. 10. 25. 16:13
C++ 프로그래머의 필독서이자 바이블인, 스콧 마이어스의 Modern Effective C++ 를 읽고 기억할 내용을 요약하고 있습니다. 꼭 읽어보시길 추천드립니다!
항목 22 : 데이터 멤버가 선언될 곳은 private 영역임을 명심하자
핵심 :
1. 데이터 멤버는 private 멤버로 선언하자 이를 통해 클래스 제작자는 문법적으로 일관성 있는 데이터 접근 통로를 제공할 수 있고, 필요에 따라서는 세밀한 접근 제어도 가능하며, 클래스의 불변속성을 강화할 수 있을 뿐 아니라, 내부 구현의 융통성도 발휘할 수 있다.
2. protected 는 public 보다 더 많이 '보호' 받고 있는 것이 절대로 아니다.
먼저, 데이터 멤버에 public 대신 private 을 써야 하는 이유를 알아보자.
- 문법적 일관성 (콤마를 붙여야 하는지, 괄호를 붙여야 하는지 헷갈리지 않음)
- 데이터 멤버의 접근성을 세밀하게 제어할 수 있음
- 캡슐화(Encapsulation)
어떤 것이 바뀌면 깨질 가능성을 가진 코드가 늘어날 때 캡슐화의 정도는 그에 반베례해서 작아진다. 즉, 해당 데이터 멤버를 수정하거나 삭제했을 때, 깨질 수 있는 코드의 양에 반비례해서 그 데이터멤버는 캡슐화 정도가 감소한다는 것이다.
그리고 충격적이게도, protected 는 public 보다 캡슐화를 더 많이 한다고 보기 힘들다.
만약 public 데이터 멤버를 제거한다면, 얼마나 많은 코드가 깨질까? 파악하기 힘들만큼 많을 것이다. 그렇다면 protected 데이터 멤버를 제거하면..? public 의 경우만큼이나 많을 것이다. protected 의 경우, 파생 클래스까지 다 살펴보려면 public 과 오십보 백보라는 뜻이다.
따라서 캡슐화의 관점에서 쓸모 있는 접근 수준은 private(캡슐화 제공) 과 private 가 아닌 나머지(캡슐화 없음), 이렇게 둘 뿐이다!
'Tutorials > C++ : Advanced' 카테고리의 다른 글
Effective C++ | 항목 24 : 타입 변환이 모든 매개변수에 대해 적용되어야 한다면 비멤버 함수를 선언하자 (0) | 2022.10.25 |
---|---|
Effective C++ | 항목 23 : 멤버 함수보다는 비멤버 비프렌드 함수와 더 가까워지자 (0) | 2022.10.25 |
Effective C++ | 항목 21 : 함수에서 객체를 반환해야 할 경우에 참조자를 반환하려고 들지 말자 (0) | 2022.10.25 |
Effective C++ | 항목 20 : '값에 의한 전달' 보다는 '상수객체 참조자에 의한 전달' 방식을 택하는 편이 대개 낫다 (0) | 2022.10.25 |
Effective C++ | 항목 19 : 클래스 설계는 타입 설계와 똑같이 취급하자 (0) | 2022.10.25 |
Comments