데이터와 동작의 경계
재생 목록 객체가 곡의 순서를 보관하고 추가와 삭제 기능을 제공한다고 하자. 외부 코드는 내부 배열을 직접 바꾸는 대신 정해진 동작을 요청할 수 있다. 이렇게 상태를 바꾸는 경계를 설계하면 유지해야 할 규칙을 한곳에서 관리하는 데 도움이 된다.
객체와 클래스
클래스 기반 언어에서 클래스는 객체의 공통 구조와 동작을 정의하고 인스턴스는 그 정의를 바탕으로 만들어진 개별 객체다. 같은 클래스에서 만든 두 객체도 서로 다른 상태를 가질 수 있다.
모든 객체 지향 언어가 클래스를 같은 방식으로 사용하는 것은 아니다. 기존 객체를 바탕으로 새 객체의 동작을 정하는 프로토타입 기반 방식도 있다.
상속과 다형성
상속은 기존 타입의 구조나 동작을 바탕으로 관계를 정의하는 방법이다. 다형성은 공통된 인터페이스를 통해 서로 다른 구현을 사용할 수 있게 하는 개념이다. 하나의 호출 형태가 객체에 따라 다른 동작으로 이어질 수 있다.
상속을 사용하면 언제나 재사용과 확장이 쉬워지는 것은 아니다. 깊은 상속 관계는 변경의 영향을 넓힐 수 있어, 다른 객체에 역할을 맡기는 합성과 함께 설계의 장단점을 살펴야 한다.
현실의 사물을 복사하는 것인가
객체는 실제 물체에만 대응하지 않는다. 거래 처리와 화면 상태, 파일 접근처럼 추상적인 역할도 객체로 표현할 수 있다. 중요한 것은 이름을 붙여 모든 코드를 클래스로 나누는 일 자체보다 책임과 의존 관계를 명확하게 정하는 일이다.