이렇게 하면 Class의 Member에 접근하고 싶을 때 괄호를 써야하는지 말아야하는지 고민할 필요가 없다. 그냥 다 붙이면 된다. 각 Memeber마다 읽기전용, 쓰기전용 등의 속성부여로 관리도 가능하며, 나중에 다른 계산식으로 대체도 가능하다. 이것을 캡슐화(Encapsulation) 이라고 한다.
class SpeedDataCollection { public: void addValue(int speed); double averageSoFar() const; ... };
위의 예제에서 평균값을 구하는 방법은 2가지 이다. addValue를 할때마다 평균값을 저장하는 방법이 있고, addValue 할때는 해당 값을 모두 배열에 저장해놓고 averageSoFar가 호출될 때 계산하는 방법이 있다. 어느 것이 더 나은 방법인가 ? 정답이 있나 ? 메모리 환경, addValue 와 averageSoFar 의 호출 빈도 등에 따라서 어느 것이 더 나은 방법인지는 상대적으로 바뀌게 된다. 하지만 내부 구현을 바꾸더라도 사용하는 곳에서는 Code를 고칠 필요가 없다.
* protected는 public보다 더 많이 보호 받고 있는 것이 절대로 아닙니다.
어떤 Class에 public data member가 있고, 이것을 제거한다면 이 member에 매달려 있는 얼마나 많은 code가 망가질까 ? proteced data member가 있고, 이것을 제거한다면 이 Class를 상속받은 Class들의 code는 얼마나 망가질까 ?
댓글 없음:
댓글 쓰기