컴퓨터 프로그램을 객체들의 모임으로 파악.
각각의 객체들은 메시지를 주고받고, 데이터를 처리할 수 있다.
프로그램을 유연하고 변경 용이하게 만드는 장점이 있다.
=>컴포넌트를 쉽게 변경하면서 개발 할 수 있다는 것. (다형성)
역할 과 구현으로 생각한다.
구분을 통해 관련 있는 객체 사이에서 한쪽 객체의 구현이 달라지더라도 달라진 구현은 역할을 따르고 있기 때문에 다른 객체에 영향을 주지 않고 변경하거나 기능을 확장해 나갈 수 있다.
역할과 구현을 분리
클라이언트는 대상의 역할만 알면된다.
클라이언트는 구현 대상의 내부를 몰라도 된다.
클라이언트는 구현 대상의 내부가 변경되어도 영향 받지 않는다.
클라이언트느 구현 대상 자체를 변경해도 영향을 받지 않는다.
역할은 인터페이스, 구현은 인터페이스를 구현한 클래스, 인스턴스
객체를 설계할 때 역할을 먼저 부여하고, 역할을 수행하는 객체를 만드는 것.
객체의 협력 (= 관계)부터 생각
혼자 모든 일을 수행하는 객체는 없다
클라: 요청, 서버: 응답
오버라이딩으로 이를 구현
인터페이스를 구현한 객체를 실행 시점에서 알맞게 호출