access control

캡슐화는 private 상태를 public 문으로만 바꾸게 한다

접근 지정자는 값을 숨기기 위한 장식이 아니라, 객체 상태가 검증된 통로로만 변하도록 만드는 장치다.

외부 호출자 객체를 사용한다

deposit(1000)처럼 공개된 동작만 호출한다.

public method 검증하고 의미를 붙인다

금액이 유효한지 확인하고, 상태 변경 규칙을 한곳에 모은다.

private data 직접 접근은 막는다

balance 같은 내부 값은 클래스가 스스로 일관성을 지킨다.

public 외부 사용자가 의존해도 되는 공식 계약이다.
private 검증 없이 바뀌면 안 되는 상태와 보조 구현이다.
protected 파생 클래스가 재사용할 확장 지점이지만 외부 API는 아니다.
상황
직접 필드 공개
접근 지정자 적용
잔액을 음수로 바꾸는 호출
위험 값이 곧바로 바뀐다.
안전 public 메서드에서 거절한다.
내부 구현 변경
취약 외부 코드가 필드 구조에 묶인다.
유지 가능 public 계약만 유지하면 된다.