개발하는 프로 국밥러
article thumbnail

오브젝트

조영호님의 책 오브젝트를 보며 정리한 내용입니다.

문제가 될 시 해당글 삭제하겠습니다.


객체지향의 본질은 협력하는 객체들의 공동체를 창조하는 것이다.

협력 : 객체들이 애플리케이션 기능을 구현하기 위해 수행하는, 상호작용
책임 : 객체가 협력에 참여하기 위해서 수행하는 행동, 로직?
역할 : 객체들이 협력 안에서 수행하는 책임들이 모여 객체가 수행하는 역할이 된다. 

<협력>
- 객체는 고립된 존재가 아닌, 시스템의 기능이라는 더 큰 목표를 향해 다른객체와 협력하는 사회적인 존재.
- 협력은 객체지향 세계에서 기능을 구현할 수 있는 유일한 방법.
-> 메시지 전송(객체가 다른 객체에게 도움을 요청)
-> 메시지를 수신한 객체는 메서드를 실행해 요청에 응답한다.(객체가 자신의 일을 스스로 처리할 수 있는 자율적인 존재)

- 객체를 자율적으로 만드는 가장 기본적인 방법은 내부 구현을 캡슐화 하는 것이다.
-> 변경에 대한 파급효과를 제한할 수 있다.

- 자율적인 객체는 자신에게 할당된 책임을 할당하던 도 중 필요한 정보를 알지 못하거나, 외부의 도움이 필요한 경우
적절한 객체에게 메시지를 전송해서 협력을 요청한다.

협력이 설계를 위한 문맥을 결정한다.
- 객체가 필요한 이유는 단 하나, 협력에 참여하고 있기때문
- 협력에 참여할 수 있는 이유는, 협력에 필요한 행동을 보유하고 있기 때문
-> 객체의 행동을 결정하는 것은 객체가 참여하고 있는 협력이다.
-> 결론적으로 협력은 객체를 설계하는데 일종의 문맥을 제공한다!!

<책임>
- 객체지향 개발에서 가장 중요한 능력은 책임을 능숙하게 소프트웨어 객체에게 할당하는 것
- 앞선 협력이 중요한 이유도, 객체에게 할당할 책임을 결정할 수 있는 문맥을 제공하기 때문!

책임할당
- 책임을 수행하는 데 필요한 정보를 가장 잘 알고 있는 전문가에게 그 책임을 할당하는 것.
-> 따라서 객체에게 책임을 할당하기 이전에 협력이라는 문맥을 먼저 정의해야 한다.
책임을 할당하는 순서
1. 메시지의 이름을 결정한다.
2. 메시지를 선택했으면, 메시지를 처리할 적절한 객체를 선정해야 한다.(전문가에게 할당해라)
3. 추가적으로 메시지가 필요하다면 추가적인 메시지를 처리할 객체를 찾으면 된다.
-> 이렇게 결정된 메시지는 퍼블릭 인터페이스를 구성하게 된다.
-> 이러한 방법을 책임주도설계라 말한다.

 

책임주도설계
1. 시스템 사용자에게 제공해야 하는 기능인 시스템 책임을 파악한다.
2. 시스템 책임을 더 작은 책임으로 분할한다.
3. 분할된 책임을 수행할 수 있는 적절한 객체 / 역할을 찾아 책임을 할당한다.
4. 객체가 책임을 수행하는 도중 다른 객체의 도움이 필요한경우, 이를 책임 질 객체 또는 역할을 찾는다.
5. 해당 객체 또는 역할에게 책임을 할당함으로써 두 객체는 협력하게 된다.

책임을 할당할 때 고려해야 하는 요소
1. 메시지가 객체를 결정한다.
- 객체가 메시지를 선택하는 것이 아니라, 메시지가 객체를 결정한다.
이유1. 최소한의 인터페이스를 가지게 된다.
이유2. 추상적인 인터페이스를 가지게 된다.
2. 행동이 상태를 결정한다.
- 객체를 객체답게 만드는 것은, 객체의 상태가 아니라 객체가 다른 객체에게 제공하는 행동이다.
- 초보자들이 가장 실수하는 부분이 상태를 먼저 생각하고, 그 후에 상태를 활용한 행동을 결정한다.
-> 캡슐화를 저해한다.

<역할>
- 객체가 어떤 협력 안에서, 수행하는 책임의 집합을 역할이라 한다.
- 역할을 구현하는 가장 일반적인 방법은, 추상클래스와 인터페이스를 사용하는 것이다.
-> 역할은 다양한 종류의 객체를 수용할 수 있는 일종의 슬롯이자 구체적인 객체들의 타입을 캡슐화하는 추상화이다.

역할과 추상화
- 역할은 공통의 책임을 바탕으로 객체의 종류를 숨기기 때문에 이런 관점에서, 역할을 객체의 추상화로 볼 수 있다.!!

 

추상화의 장점
1. 세부 사항에 억눌리지 않고도 상위 수준의 정책을 쉽고 간단하게 표현할 수 있다!
2. 설계를 유연하게 만들 수 있다.
-> 역할이 다양한 종류의 객체를 끼워넣을 수 있는 슬롯이라는 점에 착안하면 쉽게 이해가 가능하다.

- 배우가 여러 연극에 참여하면서 여러 배역을 연기할 수 있는 것처럼,
- 객체 역시 여러 협력에 참여하면서 다양한 역할을 수행할 수 있다!

profile

개발하는 프로 국밥러

@gugbab2

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!