접근 제어자 설계 기준
외부 호출부가 써도 되는 계약, 클래스 내부의 불변식, 자식 클래스의 확장 지점을 분리하면 public , private , protected 선택이 명확해집니다.
외부 API로 남길 멤버
클래스 내부 허용 · 자식 클래스 허용 · 인스턴스 외부 허용 · 호출부가 의존해도 되는 이름과 반환 타입만 공개합니다.
불변식을 지키는 내부 상태
클래스 내부 허용 · 자식 클래스 차단 · 인스턴스 외부 차단 · 검증 로직을 우회하면 안 되는 값은 메서드를 통해서만 바꿉니다.
상속 확장용 내부 계약
클래스 내부 허용 · 자식 클래스 허용 · 인스턴스 외부 차단 · 하위 클래스가 재사용할 훅은 노출하되 외부 호출은 막습니다.
외부에서 값이 자주 깨진다면
속성을 private 으로 숨기고, 검증을 통과한 변경만 public 메서드로 열어 잘못된 상태 유입을 막습니다.
상속 클래스가 중복 구현한다면
공통 로직은 protected 메서드로 올리고, 외부에 필요한 결과만 공개합니다.
핵심public/private 노출 경계 멤버를 공개할수록 호출부와 강하게 결합됩니다. 필요한 접근 범위보다 한 단계 넓히지 않는 습관이 핵심입니다.