객체지향의 사실과 오해 4장 : 역할, 책임, 협력

일단 해볼게·2023년 6월 14일
0

book

목록 보기
4/13

훌륭한 객체지향 설계

  • 조화를 이루며 적극적으로 상호작용하는 협력적인 객체를 창조하는 것
  • 따로 떼어놓고 봤을 때 이상해도 상관없다.

→ 개별적인 객체의 행동이나 상태가 아니라 객체들 간의 협력에 집중하자.

협력

  • 스스로 해결하기 어려운 문제에 부딪히게 되면 문제를 해결하는데 도움을 받을 수 있는 누군가에게 도움을 요청한다.
  • 요청과 응답은 협력에 참여하는 객체가 수행할 책임을 정의

책임

  • 어떤 객체가 어떤 요청에 대해 대답해 줄 수 있거나 , 적절한 행동을 할 의무가 있는 경우 해당 객체가 책임을 가진다고 말한다.
  • 객체에 의해 정의되는 응집도 있는 행위의 집합
  • 객체의 책임
    • 객체가 무엇을 알고 있는가와 무엇을 할 수 있는가로 구성
  • 책임은 객체의 공용 인터페이스를 구성한다.
    • 책임은 객체의 외부에 제공해줄 수 있는 정보와 외부에 제공해 줄 수 있는 서비스의 목록

메시지 전송

  • 객체가 다른 객체에게 주어진 책임을 수행하도록 요청을 보내는 것

역할

  • 어떤 객체가 수행하는 책임의 집합은 객체가 협력 안에서 수행하는 역할을 암시
    • 역할이 재사용 가능하고 유연한 객체지향 설계를 낳는다!
    • 해당 역할을 수행할 수 있는 어떤 객체라도 대신할 수 있다.
    • 역할을 대체할 수 있는 객체는 동일한 메시지를 이해할 수 있는 객체로 한정
  • 단순성, 유연성, 재사용성 을 뒷받침하는 핵심 개념
    • 협력을 추상화함으로써 단순화할 수 있다.

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

  • 객체가 존재하는 이유는 행위를 수행하며 협력에 참여하기 위해서다.
    • 클래스를 어떻게 구현할 것인가가 아니라 객체가 협력 안에서 어떤 책임과 역할을 수행할 것인지 결정하는 것이 중요
  • 올바른 객체를 설계하는 과정
    • 협력을 설계한다 = 설계에 참여하는 객체들이 주고받을 요청과 응답의 흐름을 결정한다.

      객체의 적절한 책임 결정

      → 객체가 협력에 참여하기 위해 필요한 데이터와 행동 결정

      → 클래스의 구현 방법 결정

객체지향 설계 기법

  • 책임-주도 설계(RDD)
    • 협력에 필요한 책임들을 식별하고 적합한 객체에게 책임을 할당하는 방식
    • 과정
      • 시스템이 사용자에게 제공해야 하는 기능인 시스템 책임을 파악
      • 시스템 책임을 더 작은 책임으로 분할
      • 분할된 책임을 수행할 수 있는 적절한 객체 또는 역할을 찾아 책임을 할당
      • 객체가 책임을 수행하는 중에 다른 객체의 도움이 필요한 경우 이를 책임질 적절한 객체 또는 역할 찾기
      • 해당 객체 또는 역할에게 책임을 할당함으로써 두 객체가 협력
  • 디자인 패턴
    • 반복적으로 사용하는 해결 방법을 정의해 놓은 설계 템플릿 모음
    • 패턴
      • 특정한 상황에서 설계를 돕기 위해 모방하고 수정할 수 있는 과거의 설계 경험
  • 테스트-주도 개발(TDD)
    • 테스트를 먼저 작성하고 테스트를 통과하는 구체적인 코드를 추가하면서 애플리케이션을 완성해나가는 방식
      • 핵심은 테스트가 아니라 구체적인 코드를 작성해나가면서 역할, 책임, 협력을 식별하고 식별된 역할, 책임, 협력이 적합한지를 피드백 받는 것
    • 테스트를 작성하는 것이 아니라 책임을 수행할 객체 또는 클라이언트가 기대하는 객체의 역할이 메시지를 수신할 때 어떤 결과를 반환하고 그 과정에서 어떤 객체와 협력할 것인지에 대한 기대를 코드의 형태로 작성하는 것
profile
시도하고 More Do하는 백엔드 개발자입니다.

0개의 댓글