방프리

17.08.14. Effective C++ 1. C++에 왔으면 C++의 법을 따릅시다. (항목22) 본문

C++/Effective C++

17.08.14. Effective C++ 1. C++에 왔으면 C++의 법을 따릅시다. (항목22)

방프리 2020. 1. 13. 04:58

항목 22 : 데이터 멤버가 선언될 곳은 private 영역임을 명심하자!

 

C++에서 클래스를 배울 때 초반에 배우는 것으로 접근지정자( 접근 한정자라고도 합니다.)를 배우게 됩니다.

즉, 멤버변수 혹은 멤버함수에 접근할 수 있는 객체를 제한하는 것이죠. 총 3가지 키워드가 있으며 

각각 private, protected, public이 있습니다. 이 부분에서 데이터 멤버(멤버변수)가 public이 되면 안되는 이유를

먼저 살펴보겠습니다.

(1) 문법적 일관성 유지

유지보수 기간이 길어질 수록 코드의 양은 반드시 늘어납니다.

양이 많아질 수록 문제되는 것이 사람이 코딩하는 것이기 때문에실수할 확률이 커지지요.

이 실수를 줄이는 방법은 굉장히 다양한데 문법적 일관성도 그 중 하나입니다.

멤버변수, 멤버함수 두 가지 다 접근시키는 것보다 함수로만 접근시키게 되면 문법적 실수를 굉장히 줄일 수 있습니다.

(2) 데이터 변조 방지

만약 변수의 접근을 모두 public으로 돌린다면 데이터가 변하거나 변조되었을 때 개발자가 어느 부분에서

데이터의 변화가 일어났는지 확실하는데 굉장히 오랜 시간이 걸리게 됩니다.

(3) 캡슐화

객체 지향 프로그래밍의 3대 요소 중 하나를 지키기 위해서라도 public의 선언은 피해야만 합니다.

public 뿐만 아니라 protected도 어찌보면 위험한 지정자입니다.

만약 public의 경우 객체가 파괴될 때 관련된 모든 함수 및 객체들이 손상을 입지만,

protected 또한 관련된 자식 클래스들에게 굉장히 큰 영향을 줍니다.

 

이것만은 잊지말자!

* 데이터 멤버는 private 멤버로 선언합시다. 이를 통해 클래스 제작자는 문법적으로 일관성 있는 데이터 접근 통로를 제공할 수 있고, 필요에 따라서는 세밀한 접근 제어도 가능하며, 클래스의 불변속성을 강화할 수 있을 뿐만 아니라, 내부 구현의 융통성도 발휘할 수 있습니다.

 

* protected는 public보다 더 많이 '보호'받고 있는 것이 절대로 아닙니다.

Comments