Access control
접근 제어자는 외부 API와 내부 구현 경계를 나눈다
public, private, protected는 보안 장벽이라기보다 사용자가 의존해도 되는 표면을 줄이는 설계 도구다.
외부 접근 가능
사용자가 믿고 호출하는 API
클래스 내부만
구현 세부와 불변 조건 보호
클래스 + 하위 클래스
상속 확장을 위한 내부 표면
공개 범위 최소화
변경 가능한 구현과 사용 계약 분리
| 상황 | 판단 |
|---|---|
| 열어도 되는 것 | 호출자가 의존해도 되는 안정 계약 |
| 숨겨야 하는 것 | 검증 없이 바꾸면 깨지는 내부 상태 |
| 상속용 표면 | 외부에는 숨기되 하위 클래스에는 허용 |
핵심 접근 범위를 줄일수록 나중에 내부 구현을 바꾸기 쉬워진다.