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 을 써야 하는 이유를 알아보자.

  1. 문법적 일관성 (콤마를 붙여야 하는지, 괄호를 붙여야 하는지 헷갈리지 않음)
  2. 데이터 멤버의 접근성을 세밀하게 제어할 수 있음
  3. 캡슐화(Encapsulation)

 

어떤 것이 바뀌면 깨질 가능성을 가진 코드가 늘어날 때 캡슐화의 정도는 그에 반베례해서 작아진다. 즉, 해당 데이터 멤버를 수정하거나 삭제했을 때, 깨질 수 있는 코드의 양에 반비례해서 그 데이터멤버는 캡슐화 정도가 감소한다는 것이다.

그리고 충격적이게도, protected 는 public 보다 캡슐화를 더 많이 한다고 보기 힘들다.

만약 public  데이터 멤버를 제거한다면, 얼마나 많은 코드가 깨질까? 파악하기 힘들만큼 많을 것이다. 그렇다면 protected 데이터 멤버를 제거하면..? public 의 경우만큼이나 많을 것이다. protected 의 경우, 파생 클래스까지 다 살펴보려면 public 과 오십보 백보라는 뜻이다.

따라서 캡슐화의 관점에서 쓸모 있는 접근 수준은 private(캡슐화 제공) 과 private 가 아닌 나머지(캡슐화 없음), 이렇게 둘 뿐이다!

Comments