접근 행렬

접근 지정자는 호출 위치별로 허용 범위가 달라진다

같은 멤버라도 클래스 내부, 파생 클래스, 외부 코드 중 어디에서 접근하는지에 따라 컴파일 가능 여부가 달라집니다.

public 모두에게 보이는 표면
허용 구현 내부에서도 자유롭게 호출합니다.
허용 자식 타입도 상속된 인터페이스로 사용합니다.
허용 객체 사용자가 의도된 방식으로 호출합니다.
private 객체 상태를 지키는 내부
허용 멤버 함수가 값 검증과 상태 변경을 담당합니다.
차단 상속받아도 부모의 private 상태는 직접 만지지 않습니다.
차단 게터, 세터, 명령 메서드로만 간접 접근합니다.
protected 상속 설계를 위한 내부
허용 부모 클래스 구현은 직접 접근할 수 있습니다.
허용 자식 클래스가 확장 구현에서 접근합니다.
차단 객체 사용자에게는 내부 구현처럼 숨겨집니다.
class

지정하지 않으면 private

class 본문에서 접근 지정자를 생략하면 멤버는 기본적으로 외부에서 접근할 수 없습니다.

struct

지정하지 않으면 public

struct는 데이터 묶음 관례에 맞춰 기본 공개 상태로 시작합니다.

guard

불변식은 public 함수가 지킨다

balance 같은 상태는 private에 두고 deposit, withdraw에서 값의 유효성을 검사합니다.

읽는 기준

접근 지정자는 멤버의 중요도를 표시하는 문법이 아니라, 어떤 코드가 그 멤버를 변경할 책임을 갖는지 정하는 경계입니다.