[객체지향의 사실과 오해] 역할, 책임, 협력 -4

2025. 3. 28. 11:06·📚 개발자의 서재/객체지향의 사실과 오해
해당 포스팅은 조영호 작가님의  객체지향의 사실과 오해 (P.130~137)를 읽고 정리한 글입니다.

 

객체지향 설계 기법

객체지향 설계란

  1. 애플리케이션의 기능을 구현하기 위한 협력 관계를 고안
  2. 협력에 필요한 역할과 책임을 식별
  3. 수행할 수 있는 적절한 객체를 식별하고 할당

객체지향 설계의 핵심은 올바른 책임을 올바른 객체에게 할당하는 것이다.

책임-주도 설계 (Responsibility-Driven Design)

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

이처럼 책임-주도 설계에서는 시스템의 책임을 객체의 책임으로 변환하고, 각 객체가 책임을 수행하는 중에 필요한 정보나 서비스를 제공해 줄 협력자를 찾아 해당 협력자에게 책임을 할당하는 순차적인 방식으로 객체들의 협력 공동체를 구축한다.

디자인 패턴 (Design Pattern)

디자인 패턴은 소프트웨어 설계 과정에서 전문가들이 반복적으로 사용하는 문제 해결 방법을 정리한 설계 템플릿의 모음이다. 일반적으로 디자인 패턴은 반복적으로 발생하는 문제와 그에 대한 효과적인 해결책의 쌍으로 정의된다.

 

 

책임-주도 설계(Responsibility-Driven Design)는 객체의 역할, 책임, 협력을 중심으로 설계를 진행하는 절차와 방법론이다. 반면, 디자인 패턴은 이러한 책임-주도 설계의 결과물을 표현하는 방식으로, 객체 간 협력 구조를 일반화한 템플릿이다.

 

 

디자인 패턴의 핵심은 클래스나 메서드가 아니라, '협력'에 참여하는 '역할'과 '책임'이다. 즉, 코드의 구체적인 구조보다는 객체들 간의 상호작용 방식과 그 안에서 각 객체가 맡는 역할에 초점을 맞춘다.

 

 

 

테스트-주도 개발(Test-Driven Development)

테스트-주도 개발의 기본 흐름

  • 실패하는 테스트를 작성
  • 테스트를 통과하는 가장 간단한 코드를 작성
  • 리팩터링을 통해 중복을 제거하는 것
  • 테스트-주도개발을 통해 '작독하는 깔끔한 코드'를 얻음

 

테스트-주도 개발을 할 때 객체가 이미 존재한다고 가정하고 객체에게 어떤 메시지를 전송할 것인지에 관해 먼저 생각해야 한다. 하지만 이는 역할, 책임, 협력의 관점에서 객체를 바라보는 것은 전제로 해야 한다. 테스트-주도 개발은 테스트를 작성하는 것이 아니라 책임을 수행할 객체 또는 클라이언트가 기대하는 객체의 역할이 메시지를 수신할 때 어떤 결과를 반환하고 그 과정에서 어떤 객체와 협력할 것인지에 대한 기대를 코드의 형태로 작성하는 것이다.

 

테스트-주도 개발은 책임-주도 설계를 통해 도달해야 하는 목적지를 테스트라는 안전장치를 통해 좀 더 빠르고 견고한 방법으로 도달할 수 있도록 해주는 최상의 설계 프랙티스이다.

 

 

저작자표시 비영리 변경금지 (새창열림)

'📚 개발자의 서재 > 객체지향의 사실과 오해' 카테고리의 다른 글

[객체지향의 사실과 오해] 책임과 메시지 -2  (0) 2025.03.30
[객체지향의 사실과 오해] 책임과 메시지 -1  (0) 2025.03.29
[객체지향의 사실과 오해] 역할, 책임, 협력 -3  (0) 2025.03.27
[객체지향의 사실과 오해] 역할, 책임, 협력 -2  (0) 2025.03.26
[객체지향의 사실과 오해] 역할, 책임, 협력 -1  (0) 2025.03.25
'📚 개발자의 서재/객체지향의 사실과 오해' 카테고리의 다른 글
  • [객체지향의 사실과 오해] 책임과 메시지 -2
  • [객체지향의 사실과 오해] 책임과 메시지 -1
  • [객체지향의 사실과 오해] 역할, 책임, 협력 -3
  • [객체지향의 사실과 오해] 역할, 책임, 협력 -2
l'avenirJun
l'avenirJun
  • l'avenirJun
    오늘도 꾸준히 개발
    l'avenirJun
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 📚 개발자의 서재 N
        • 객체지향의 사실과 오해
        • Good Code, Bad Code
        • 도메인 주도 개발 시작하기 N
      • 🔧 트러블 슈팅
      • Java
      • Spring
      • 운영체제
        • 공룡책 학습
      • 알고리즘
      • GIT
      • 면접 지식
      • Spring 단기심화 2기
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    유스케이스
    도메인 주도 개발 시작하기
    모듈화
    책임-주도 설계
    가독성
    표현 영역
    캡슐화
    협력
    객체
    specification
    타입
    코드트리
    오블완
    메시지
    애그리거트
    매핑 구현
    리포지터리
    코딩테스트
    인터페이스
    객체지향의 사실과 오해
    추상화
    코딩트리조별과제
    책임
    DIP
    코드 계약
    티스토리챌린지
    애그리거트 루트
    도메인 모델
    역할
    good code bad code
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
l'avenirJun
[객체지향의 사실과 오해] 역할, 책임, 협력 -4
상단으로

티스토리툴바