객체지향 패러다임의 핵심은 역할, 책임, 협력
협력하는 객체들의 공동체를 창조
협력 - 애플리케이션 기능을 구현하기 위해 수행하는 상호작용
책임 - 객체가 협력에 참여하기 위해 수행하는 로직
역할 - 책임들의 집합
객체지향에서 기능을 구현할 수 있는 유일한 방법
객체를 설계하기 위한 필요 문맥
한 객체가 다른 객체에 **메시지 전송**을 할 때 시작
유일한 방법 → 다른 객체의 내부 구현에 접근 불가하기 때문
수신 객체는 메서드를 실행해 응답
어떻게 처리할지는 스스로 결정 == 자율적인 존재
ex)
Screening —calculateMovieFee(screening)→ Movie
Movie가 기본 요금과 할인 정책을 가장 잘 알고 있기 때문
Screening이 직접 Movie 내부의 객체에 접근한다면?
Movie의 자율성 훼손
⇒ 내부 구현을 **캡슐화**할 때 가장 자율적임
협력이 설계의 문맥을 결정한다.
객체 = 상태 + 행동
상태와 행동을 어떻게 정의해야할까?
행동
→ 협력에 참여할 적절한 행동인가?
Movie 행동을 결정하는 것은 영화 예매를 위한 협력
상태
→ 행동을 수행하는 데에 필요한 상태가 무엇인가?
Movie 내부 상태를 가지고 있는 이유는 요금 계산이라는 행동을 수행하는 데에 필요
결정 방향
⭐ 객체가 참여하는 협력 → 객체의 행동 → 객체의 상태 ⭐