IT 관련 책 정리 및 후기/객체지향의 사실과 오해

[4장] 역할, 책임, 협력

JUN0126 2022. 7. 18. 21:29

협력

 - 협력은 다수의 요청과 응답으로 구성되며 전체적으로 협력은 다수의 연쇄적인 요청과 응답의 흐름으로 구성된다.

 - 객체들간의 요청과 응답으로 협력 관계를 이루어 각 객체가 수행할 책임을 정의한다.

 

책임

 - 어떤 요청에 대한 응답이나, 적절한 행동을 할 의무가 있다는 것임을 나타내는것이 책임이다.

 - 책임은 객체에 의해 정의되는 응집도 있는 행위의 집합, 무엇을 할 수 있는가에 대한 초점으로 맞춰야 한다.

 - 책임은 객체의 공용 인터페이스 (public interface)를 구성한다.

 

책임의 분류

 1. 하는것 (Doing)

  - 다른 객체에게 요청을 보내어 다른 객체가 행동을 시작하게 하는것 

 2. 아는것 (Knowing)

 - 다른 객체에 대한 정보를 알고 있는 것 EX) 토끼가 목격자가 모자 장수라는것을 알고 있는 것 

 - 아마 객체의 정보를 알고 있어 Getter 사용 시 해당 객체의 내용을 알 고 있다는 것 같다.

 

책임과 메세지

 - 협력을 위해서는 객체가 메세지를 송신하고  해당 메세지를 받은 객체가 수신하여 해당 요청에 대한 응답을 해야한다.

  -> 이렇게 보면 책임과 메세지가 같아 보일 수 있지만 하나의 책임이 여러 메시지로 바뀌어 분할되어 요청하는 것이다 (헷갈린다..)

 

역할

 - 협력 내에서 다른 객체로 대체할 수 있음을 나타내는 일종의 표식

  -> 메세지를 이해하고 해당 메세지에 대한 요청을 처리할 수 있어야 하는 역할

 - 역할의 개념을 이용하면 유사한 협력을 추상화 하여 인지 과부하를 줄일 수 있다

   -> 역할의 대체 가능성은 행위 호환성을 의미하고, 행위 호환성은 동일한 책임의 수행을 의미한다 

 

객체의 모양을 결정하는 협력

 - 객체는 역할을 가지며 해당 역할이 행동을 통하여 상태를 변화시키는 책임이 있다.

 - 협력이라는 문맥을 갖추고 협력을 위해 필요한 책임의 흐름으로 옮겨지며, 객체에게 책임을 할당하는것을 적절히 수행하여야 한다

 

 

객체지향 설계 기법

1. 책임-주도 설계 (Responsiblity-Driven Design)

 - 협력에 필요한 책임들을 식별하고 적합한 객체에서 책임을 할당하는 방식

 - 올바른 책임을 올바른 객체에게 할당하는 것

 - 시스템의 기능은 더 작은 규모의 책임으로 분할되고, 각 책임은 적절한 객체에 할당하는 것

 

2. 디자인 패턴 (Design Pattern)

 - 책임-주도 설계의 결과를 표현한 것

 - 반복적으로 발생하는 문제와 그 문제를 해결하는 해법의 쌍으로 정의된다. EX) GOF 디자인 패턴 

 - 공통으로 사용되는 역할, 책임, 협력 의 템플릿

 

3. 테스트 주도 개발 (TDD)

 - 테스트 코드를 먼저 개발하고 테스트가 통과 되는 코드를 작성하는 방식

 - 객체의 역할이 어떤 것인지 생각하며 메세지를 송수신 할때 반환되는 값이나 예측되는 협력의 결과물들을 테스트 코드로 작성한 후 프로덕트 코드를 개발한다

 - 객체지향에 대한 이해를 먼저 가지고 책임-주도 설계에 기본 개념과 다양한 디자인 패턴을 종합적으로 사용하여 역할, 책임, 협력에 집중하여 객체지향에 대한 원칙을 적용하여 좋은 품질의 코드를 만들어 내는것이다.

 

 

결론

 - 객체지향 설계의 전체적인 품질을 결정하는 것은 개별 객체의 품질이 아니라 여러 객체들이 모여 이뤄내는 협력의 품질이다.

 또한 각 객체의 역할, 책임, 협력에 집중하여 생각하여 좋은 품질의 객체를 만들어 낼 수 있도록 해야겠다..

 

해당 내용은 객체지향의 사실과 오해 를 읽으며 제가 이해한 내용으로 정리한 내용입니다.

자세한 내용과 적확한 내용은 책을 읽어주시길 바랍니다. (책을 읽는것을 추천드립니다)

 

책 : https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=60550259

 

객체지향의 사실과 오해

위키북스 IT Leaders 시리즈 23권. 객체지향이란 무엇인가? 이 책은 이 질문에 대한 답을 찾기 위해 노력하고 있는 모든 개발자를 위한 책이다.

www.aladin.co.kr