Post List

2015년 1월 4일 일요일

Data Member가 선언될 곳은 private 영역임을 명심하자.

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

 이렇게 하면 Class의 Member에 접근하고 싶을 때 괄호를 써야하는지 말아야하는지 고민할 필요가 없다. 그냥 다 붙이면 된다. 각 Memeber마다 읽기전용, 쓰기전용 등의 속성부여로 관리도 가능하며, 나중에 다른 계산식으로 대체도 가능하다. 이것을 캡슐화(Encapsulation) 이라고 한다.

class SpeedDataCollection {
public:
     void addValue(int speed);
    double averageSoFar() const;
    ...
};


 위의 예제에서 평균값을 구하는 방법은 2가지 이다. addValue를 할때마다 평균값을 저장하는 방법이 있고, addValue 할때는 해당 값을 모두 배열에 저장해놓고 averageSoFar가 호출될 때 계산하는 방법이 있다. 어느 것이 더 나은 방법인가 ? 정답이 있나 ? 메모리 환경, addValue 와 averageSoFar 의 호출 빈도 등에 따라서 어느 것이 더 나은 방법인지는 상대적으로 바뀌게 된다. 하지만 내부 구현을 바꾸더라도 사용하는 곳에서는 Code를 고칠 필요가 없다.

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

 어떤 Class에 public data member가 있고, 이것을 제거한다면 이 member에 매달려 있는 얼마나 많은 code가 망가질까 ? proteced data member가 있고, 이것을 제거한다면 이 Class를 상속받은 Class들의 code는 얼마나 망가질까 ?



댓글 없음:

댓글 쓰기