본 게시물은 조영호님의 저서 오브젝트를 학습하면서 정리한 내용입니다.
객체지향 개발자라면 꼭 알아야할 내용들이 가득한 책이기 때문에 참고만하시고 반드시 책을 구매해서 읽어보길 권해드려요!
(네이버 도서 구매링크 클릭)
저작물에 대한 문제가 발생할 경우 비공개 처리하겠습니다.
- 객체지향 패러다임의 관점에서 핵심은 역할, 책임, 협력
- 객체지향의 본질은 협력하는 객체들의 공동체를 창조하는 것
- 협력을 구하기 위해 적절한 객체를 찾음 → 적절한 책임을 할당
- 협력을 위한 역할과 책임을 고민하는 것이 중요
협력
- 객체지향 원칙을 따르면 애플리케이션의 제어 흐름이 다양한 객체들에게 균형있게 분배됨
- 어떤 하나의 객체에 의해 통제되지 않음
- 객체들 사이에 메시지를 주고 받으면서 상호작용을 함 ( 협력 )
- 자율적인 객체들의 공동체
- 기능을 구현하는 유일한 방법
- 메시지를 받은 객체는 메서드를 실행해서 응답
- 메시지에 대한 처리방법은 수신한 객체가 스스로 선택(메서드)
자율적인 객체
- 자신의 상태를 직접 관리하고 스스로 결정에 따라 행동하는 객체
- 필요한 정보, 정보에 기반한 행동을 같은 객체 안에 모아야 함
- 가장 기본적인 방법으로는 내부 구현을 캡슐화하는 것
협력이 설계를 위한 문맥을 결정한다
- 객체가 협력에 참여하기위해 적절한 행동을 보유해야 함
- 객체의 행동은 협력의 필요에 따라 결정되어야 함
- 협력이 바뀌면 행동도 바뀌어야 함
- 협력은 객체가 필요한 이유, 객체가 수행하는 행동의 동기를 제공
- 왜 이 객체가 필요한가? → 협력하고 있기 때문이다.
- 이 객체는 왜 이러한 행동을 하는가 → 협력에 참여하고 있기 때문이다.
- 협력은 객체지향 설계에서의 문맥
- 상태는 객체가 행동하는데 필요한 정보에 의해 결정
책임
책임이란 무엇인가
- 협력에 참여하기위해 객체가 수행하는 행동
- 객체에 의해 정의되는 응집도 있는 행위의 집합
- 객체의 정보와 행동으로 구성
- 하는 것
- 객체가 스스로 수행하는 것 ( 직접 계산 등..)
- 다른 객체의 행동을 시작시키는 것
- 다른 객체의 활동을 제어하고 조절하는 것
- 아는 것
- 사적인 정보 (private data)
- 관계된 객체에 관해 아는 것 (합성)
- 자신이 유도하거나 계산할 수 있는 것에 관해 아는 것
- 하는 것
- 협력 안에서 객체에게 할당한 책임이 외부의 인터페이스와 내부의 속성을 결정
- 적절한 협력 → 적절한 책임을 제공, 적절한 책임을 객체에게 할당 → 유연한 설계 가능
- 객체에게 얼마나 적절한 책임을 할당하느냐가 설계 품질을 결정함
책임과 메시지
- 일반적으로 책임과 메시지의 크기는 다름
- 책임은 객체가 수행할 수 있는 행동 ( 종합적, 간략하고 서술 )→ 메시지보다 추상적인 개념
- 단순한 책임이 여러 개의 메시지로 분할 되기도 함
- 하나의 객체가 수행할 수 있다고 생각했던 책임이 여러 객체들의 협력으로 만들어지기도 함
CRC 카드
- 객체지향설계를 돕기위해 고안된 방법
- 각각이 후보, 책임, 협력을 뜻 함
- 후보
- 카드 뒤에 후보의 목적을 기술
- 후보가 외부에 제공해야 하는 서비스를 한 문장으로 기술
- 카드 뒤에 후보의 목적을 기술
- 책임
- 카드 앞면에 선을 긋고 한쪽에 목적을 세분화해서 무엇을 알고 무엇을 해야하는가 기재
- 협력
- 책임을 수행하려면 협력할 협력자 나열
- 후보
- 설계를 하면서 직접 눈으로 보고 손으로 만질 수 있을때 효과적
책임할당
- 자율적인 객체를 만드는 가장 기본적인 방법→ 책임을 수행하는데 필요한 정보를 가장 잘 아는 전문가에게 책임 할당
- ⇒ 협력에 필요한 지식과 방법 잘 알고 있는 객체에게 도움을 요청
- 책임을 할당하는 것만으로도 상태와 행동을 함께 가지는 자율적인 객체를 만들 가능성이 높아짐
책임할당의 순서
- 협력이라는 문맥을 정의
- 시스템이 제공하는 기능을 하나의 책임으로 바라보는 것부터 시작
- 시스템 책임을 완료하는데 필요한 작은 책임을 찾아내고 객체에 할당하길 반복
- 메시지의 이름을 결정하는 것으로 책임을 할당
- 책임을 수행하는 유일한 방법은 메시지이기 때문
- 메시지를 처리할 객체를 선택
- 정보를 소유하고 있거나 정보의 소유자를 잘 아는 전문가를 찾는 것
- 메시지의 이름을 결정하는 것으로 책임을 할당
⇒ 이렇게 결정된 메시지는 퍼블릭 인터페이스가 됨
책임 주도 설계
- 책임을 찾고 수행할 객체를 찾아 할당하는 방식의 설계를 말함
- 어떤 책임을 선택하느냐에 따라 전체적인 설계의 방향과 흐름이 결정됨
- 객체의 구현이 아닌 책임에 집중할 수 있게 함
- 유연하고 견고한 객체지향 시스템의 가장 중요한 재료
- 책임을 할당할 때 가장 중요한 요소
- 메시지가 객체를 결정
- 행동이 상태를 결정
메시지가 객체를 결정한다
- 책체가 메시지를 선택하는 것이 아님 → 메시지가 객체를 선택
- 최소한의 인터페이스를 갖게 하기 위함
- 필요한 메시지가 식별될 때까지 퍼블릭 인터페이스에 추가되는 것이 없음→ 꼭 필요한 크기의 인터페이스를 갖게 됨
- 추상적인 인터페이스를 갖게 하기 위함
행동이 상태를 결정한다
- 상태는 객체가 행동을 정상적으로 수행하기위해 필요한 재료일 뿐
- 객체의 행동은 객체가 협력에 참여할 수 있는 유일한 방법
- 객체의 상태에 초점을 맞추면 객체의 내부 구현이 객체의 퍼블릭 인터페이스에 노출됨→ 캡슐화 저해
역할
역할과 협력
- 역할 : 협력안에서 수행하는 책임의 집합
- 다른 것으로 교체할 수 있는 책임의 집합
- 협력을 모델링할 때 → 특정한 객체가 아니라 역할에게 책임을 할당한다고 생각해야 함
- 책임을 할당한다는 것을 분해
- 역할을 찾음
- 역할을 수행하는 객체를 선택
유연하고 재사용 가능한 협력
- 역할의 중요성 : 역할을 통해 유연하고 재사용 가능한 협력을 얻을 수 있음
- 역할은 하나의 슬롯
- 구체적인 객체를 포괄하는 추상화의 개념
- 역할을 기반으로 불필요한 중복 코드를 제거하고 하나로 통합하는 것이 가능
- 역할에 의해 변경과 확장이 용이한 유연한 설계가 가능함
객체 대 역할
- 협력에 적합한 책임을 수행하는 댓아이 여러 종류면 역할이라고 부름
- 협력에 적합한 책임을 수행하는 대상이 한 종류면 객체로 간주해도됨
- 역할을 협력 안에서 각자의 위치를 가지는 객체들에 대한 별칭이라고 정의하기도 함
역할과 추상화
- 역할의 큰 장점은 설계 요소를 추상화 할 수 있다는 것
- 추상화의 장점과 동일한 장접을 갖게됨
- 세부적인 사항을 무시하고 추상화에 집중할 수 있음
- 설계를 유연하게 만들 수 있음
배우와 배역
- 무대에서의 배우, 배역과 객체지향에서의 역할이 유사함
- 객체는 협력(실행 문맥) 안에서 특정한 역할을 수행
- 협력이 끝나면 원래의 객체로 돌아올 수 있음
- 객체가 협력에 참여하는 동안에만 존재하는 일시적인 개념
- 객체는 여러 역할을 가질 수 있으나 특정한 협력 안에서는 일시적으로 오직 하나의 역할만 바라볼 수있음
'BackEnd가 좋아 > 개발서적' 카테고리의 다른 글
오브젝트 - 🧤 2. 객체지향 프로그래밍 (0) | 2023.01.30 |
---|---|
오브젝트 - 📒 1. 객체, 설계 (0) | 2023.01.23 |