OOP Core

클래스 설계는 숨길 상태와 공개할 약속을 나누는 일이다

객체 지향 설계의 출발점은 데이터를 어디에 두느냐보다, 외부가 어떤 경로로만 상태를 바꿀 수 있게 할지 정하는 것입니다.

private state

agefuelLevelspeed

객체가 지켜야 할 실제 값입니다. 외부에서 직접 만지면 무결성이 깨질 수 있습니다.

public methods

setAge()accelerate()getSpeed()

외부가 사용할 수 있는 공식 약속입니다. 이 경로에서 검증과 계산을 수행합니다.

field객체가 보관할 상태를 정합니다.
method상태를 읽고 바꾸는 경로를 모읍니다.
invariant나이, 속도처럼 지켜야 할 조건을 클래스 안에서 관리합니다.
interface외부에 보여줄 최소 약속만 남깁니다.
직접 바꿔도 안전한가아니라면 private으로 숨기고 메서드로만 바꿉니다.
검증이 필요한가범위, 권한, 순서가 있으면 public 함수 안에 둡니다.
외부가 알아야 하나사용 약속이 아니면 내부 구현으로 남깁니다.
좋은 클래스는 멤버를 많이 노출하지 않습니다. 숨길 상태와 공개할 약속을 분리해 객체가 스스로 일관성을 지키게 합니다.