access audit

접근 지정자는 객체 상태가 새는 길을 막는다

좋은 클래스는 외부가 내부 필드를 외우게 하지 않고, 검증된 public 동작만 의존하게 만든다.

나쁜 노출: 필드가 public
public balance
외부 코드가 account.balance = -100;처럼 값을 직접 바꾼다.
검증 지점이 흩어지고 객체 불변식이 깨진다.
좋은 경계: 상태는 private, 동작은 public
private balance
public deposit(), withdraw()
모든 변경이 메서드의 검증 규칙을 지난다.
private 객체가 스스로 지켜야 하는 상태와 보조 구현을 둔다.
public 외부 사용자가 의존해도 되는 안정적인 명령만 둔다.
protected 파생 클래스가 확장해야 하지만 외부에는 감출 지점을 둔다.
설계 질문: “이 멤버를 바꾸는 책임이 외부 사용자에게 있는가, 객체 자신에게 있는가?” 답이 객체 자신이면 private으로 닫고 public 메서드로 통제한다.