C++ 접근 제어

접근 지정자 불변식 경계

접근 지정자는 문법 장식이 아니라 객체가 스스로 지켜야 할 상태 조건의 경계다. 호출자가 알아야 하는 명령만 public에 두고, 상속 확장 지점과 내부 구현을 분리한다.

01

계약 선별

외부 사용자가 호출해야 하는 최소 기능만 public으로 노출한다.

표면적 축소
02

상태 보호

멤버 변수는 직접 노출하지 않고 검증된 메서드로만 변경한다.

불변식 유지
03

상속 지점

파생 클래스가 재정의하거나 보조해야 하는 부분만 protected로 둔다.

과도한 protected 경계
04

예외 접근

연산자나 직렬화처럼 밀접한 함수만 friend로 지정한다.

권한은 좁게
class
기본 접근 private 명시하지 않으면 멤버와 base class 상속 접근이 private이 된다.
struct와 차이
struct
기본 접근 public 단순 데이터 묶음에는 자연스럽지만 불변식이 있으면 public 필드는 위험하다.
POD 감각
protected
파생 클래스 결합 증가 내부 표현이 상속 계층에 새어 나가면 base 변경이 어려워진다.
virtual 함수 우선
friend
캡슐화 우회가 아니라 명시 권한 테스트 편의 때문에 넓게 열면 설계 신호가 나빠진다.
대상 최소화

API 리뷰 · 상속 리뷰 · friend 리뷰 점검

API 리뷰 public 멤버가 내부 구현 세부를 드러내지 않는지 확인한다.
상속 리뷰 protected 데이터보다 protected virtual 함수로 확장하는 편이 나은지 검토한다.
friend 리뷰 friend 선언이 양방향 권한이 아니라 지정 대상 한정 권한임을 확인한다.