역할, 책임, 협력
어떤 협력에 참여하는 특정한 사람이 협력 안에서 차지하는 책임이나 임무를 의미.
역할은 책임이라는 개념을 내포한다.
협력 ➡️ 특정한 역할 ➡️ 특정한 책임 암시
실세계 | 프로그래밍 |
---|---|
사람 | 객체 |
요청 | 메시지 |
요청 처리 방법 | 메서드 |
특정한 책임을 수행하는 역할들 간의 연쇄적인 요청과 응답을 통해 목표를 달성하는 것.
사람: 공통의 목표를 달성하기 위해 협력
객체: 애플리케이션의 기능을 구현하기 위해 협력
애플리케이션의 기능 ➡️ 더 작은 책임으로 분할 ➡️ 책임은 역할을 수행할 수 있는 객체가 수행
시스템 ➡️ 역할과 책임을 수행하는 객체로 분할
객체 간의 연쇄적인 요청과 응답의 흐름으로 구성된 협력으로 구현된다.
역할은 유연하고 재사용 가능한 협력 관계를 구축하는 데 중요한 설계 요소이다.
객체지향 애플리케이션의 윤곽을 결정하는 것은 역할, 책임, 협력 이지만,
➡️ 실제로 협력에 참여하는 주체는 "객체" 이다.
객체는 애플리케이션의 기능을 구현하기 위해 존재한다.
➡️ 객체는 다른 객체와의 협력을 통해 기능을 구현하게 된다.
객체지향 애플리케이션의 아름다움을 결정하는 것이 협력이라면, 협력이 얼마나 조화를 이루는지 결정하는 것은 객체이다.
▶️ 결국, 협력의 품질을 결정하는 것은 "객체" 이다.
객체는 상태와 행동을 함께 지닌 실체이다.
객체의 자율성이란,
자신의 상태를 직접 관리하고 상태를 기반으로 스스로 판단하고 행동할 수 있음을 의미한다.
객체는 상태와 행위를 하나의 단위로 묶는 자율적인 존재이다.
객체지향의 세계에서 협력은 메시지를 전송하는 객체와 메시지를 수신하는 객체 사이의 관계로 구성된다.
객체가 수신된 메시지를 처리하는 방법
객체지향 프로그래밍 | 절차지향 프로그래밍 |
---|---|
메시지를 수신한 객체가 실행 시간에 메서드를 선택할 수 있다. | 프로시저 호출에 대한 실행 코드를 컴파일 시간에 결정한다. |
외부의 요청이 무엇인지를 표현하는 메시지와 요청을 처리하기 위한 구체적인 방법인 메서드를 분리하는 것은 객체의 자율성을 높이는 핵심 메커니즘이다.
➡️ 캡슐화(encapsulation) 개념과 관련이 깊다.
코드를 담는 클래스의 관점 X ➡️ 메시지를 주고 받는 객체의 관점으로 사고의 중심을 전환하는 것 O
어떤 클래스가 필요한가? X ➡️ 어떤 객체들이 어떤 메시지를 주고 받으며 협력하는 가? O