Item 22: 데이터 멤버가 선언될 곳은 private 영역이다
1. 그 이유는 무엇인가?
- 사용자에게 일관성 있는 접근을 허용한다.(오직 함수를 통해서만)
데이터 멤버의 접근성에 대해 훨신 정교한 제어를 가능하게 한다.
-> setter, getter를 통해 읽기 전용, 읽기쓰기 모두, 쓰기 전용 등의 방식을 지정할 수 있다.
즉 캡슐화를 통해서 함수를 통해서만 데이터 멤버에 접근하도록 강제할 수 있고, 동시에 구현자에게 추가적인 작업을 할 수 있는 여지를 준다.(사후조건, 사전조건)
2. protected 를 사용하면 어떤가?
public과 별 차이 없다. 결국 마찬가지 문제가 발생한다. 나중에 protected를 private으로 변경하면 이전에 사용되던 코드는 어떻게 해야 하는가?
정리
- 데이터 멤버는 private 멤버로 선언합시다. 이를 통해 클래스 제작자는 문법적으로 일관성 있는 데이터 접근 통로를 제공할 수 있고, 필요에 따라서는 세밀한 접근 제어도 가능하며, 클래스의 불변속성을 강화할 수 있을 뿐 아니라, 내부 구현의 융통성을 발휘할 수 있다.
- protected는 public 보다 더 많이 보호받고 있는 것이 절대로 아니다.