예제) 영화 예매
대부분의 사람은 클래스를 결정한 후에 클래스에 어떤 속성과 메서드가 필요한지 고민한다.
하지만, 객체 지향은 클래스가 아닌 객체에 초점을 맞출 때에만 얻을수있다.
첫째, 어떤 클래스가 필요한지를 고민하기 전에 어떤 객체들이 필요한지 고민하라.
둘째, 객체를 독립적인 존재가 아니라 기능을 구현하기 위해 협력하는 공동체의 일원으로 봐야 한다.
도메인 이란, 문제를 해결하기위해 사용자가 프로그램을 사용하는 분야를 가리킨다.
일반적으로 클래스의 이름은 대응되는 도메인 개념의 이름과 동일하거나 적어도 유사하게 지어야한다.
클래스 생성시
외부에서는 객체의 속성에 직접 접근할수 없고(private) public 메소드를 통해서만 내부 상태를 변경할 수 있게 해야 한다.
이유) 경계의 명확성이 객체의 자율성을 보장하기 때문이다. + 프로그래머에게 구현의 자유를 제공하기 때문
캡슐화 - 데이터와 내부 기능을 함께 묶는것
캡슐화와 접근제어
객체의 변경을 관리할 수있는 기법 = 접근제어