접근 제어자

공개 API와 내부 구현을 나누는 가시성 표

public, protected, private은 문법 장식이 아니라 객체의 사용 경계를 표시한다. 어떤 멤버가 외부 계약인지, 상속 확장 지점인지, 내부 불변식인지 먼저 나누면 클래스 설계가 안정된다.

외부 호출자 public만 계약

변경하면 사용 코드에 직접 영향을 준다.

상속 계층 protected는 확장 지점

자식 클래스에서 쓰되 외부에는 숨긴다.

클래스 내부 private은 불변식 보호

검증 없는 직접 변경을 막는다.

public

접근 가능

접근 가능

접근 가능

protected

접근 가능

접근 가능

외부 접근 제한

private

접근 가능

상속 접근 제한

외부 접근 제한

API

호출자가 알아야 하는 동작은 public

생성, 조회, 명령처럼 사용자가 의존하는 메서드는 명확한 공개 계약으로 둔다.

확장

자식 클래스 재정의 지점은 protected

외부 API는 아니지만 상속 설계에 필요한 훅과 상태만 좁게 연다.

불변식

검증 없이 바뀌면 안 되는 상태는 private

값 변경은 public 메서드나 생성자를 통과하게 만들어 규칙을 유지한다.