캡슐화는 데이터를 숨기는 일이 아니라, 객체가 깨진 상태로 보이지 않게 하는 일이다. 불변식은 생성 이후 공개 연산이 끝날 때마다 참이어야 하는 조건이다.
범위를 타입 안에 두기
class Depth {
public:
explicit Depth(int n) : n_{n < 1 ? 1 : n} {}
int get() const { return n_; }
private:
int n_;
};깊이 0을 허용하지 않는다면, 그 거절은 사용하는 쪽마다 흩어두지 않고 생성자에 둔다. 이후의 멤버 함수는 `n_ >= 1`이라고 가정할 수 있다.
공개 면적을 줄이기
공개 함수는 호출자가 필요로 하는 동작만 연다. 내부 버퍼의 주소를 반환해 호출자가 수명을 무시하고 쓰게 하면 캡슐화는 깨진다. 읽기가 필요하면 값이나 `const` 참조, 또는 나중에 볼 뷰 타입으로 빌려 준다.
`friend`는 특정 함수에만 비공개 접근을 허용한다. 연산자 구현처럼 멤버로 두면 어색한 경우에 한정한다. 클래스 전체를 친구로 여는 일은 드물어야 한다.
댓글
0개아직 댓글이 없습니다.