[객체지향의 사실과 오해] 함께 모으기 -1

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

 

 

마틴 파울러는 객체지향 설계 안에 존재하는 세 가지 상호 연관된 관점에 관해 설명한다. 그 세 가지는 개념 관점, 명세 관점, 구현 관점이라고 부른다.

 

개념 관점(Conceptual Perspective)에서 설계는 도메인 안에 존재하는 개념과 개념들 사이의 관계를 표현한다. 도메인이란 사용자들이 관심을 가지고 있는 특정 분야나 주제를 말하며 소프트웨어는 도메인에 존재하는 문제를 해결하기 위해 개발된다. 이 관점은 사용자가 도메인을 바라보는 관점을 반영한다. 

 

명세 관점(Specification Perspective)에 이르면 사용자의 영역인 도메인을 벗어나 개발자의 영역인 소프트웨어로 초점이 옮겨진다. 해당 관점은 실제로 소프트웨어 안에서 살아 숨 쉬는 객체들의 책임에 초점을 맞추게 된다. 즉, 객체의 인터페이스를 바라보게 된다.

 

구현 관점(Implementation Perspective)은 실제 작업을 수행하는 코드와 연관돼 있다. 구현 관점의 초점은 객체들이 책임을 수행하는 데 필요한 동작하는 코드를 작성하는 것이다. 인터페이스를 구현하는 데 필요한 속성과 메서드를 클래스에 추가한다.

 

이 세 구현 관점 순서대로 소프트웨어를 개발하지는 않는다. 동일한 클래스를 동시에 세 가지 다른 방향에서 바라보는 것을 의미한다.

 

이것은 클래스를 어떻게 설계해야 하느냐에 대한 중요한 힌트를 암시한다. 클래스는 세 가지 관점을 모두 수용할 수 있도록 개념, 인터페이스, 구현을 함께 드러내야 한다. 동시에 세 가지 관점을 쉽게 식별할 수 있도록 깔끔하게 분리해야 한다.

 

지금까지 역할, 책임, 협력을 이용해 객체의 인터페이스를 식별했다. 협력에 참여하기 위해 객체가 수신해야 하는 메시지를 결정하고 메시지들이 모여 객체의 인터페이스를 구성한다는 점을 기억해야 한다. 따라서 협력 안에서 메시지를 선택하고 메시지를 수신할 객체를 선택하는 것은 객체의 인터페이스, 즉 명세 관점에서 객체를 바라보는 것이다.

 

여러 토이프로젝트를 진행하면서 설계를 할 때 해당 수준까지 고민해 본 경험은 없는 것 같다. 무의식 중에 자연스럽게 묻어날 수도 있었겠지만 의도가 있었던 것은 아니다. 단순히 필요한 기능을 나열하고 3-tier 아키텍처(Controller-Service-Repository)에 맞춰서 코드를 구현했다. 앞으로 설계를 하게 된다면 의식적으로 생각하면서 세 가지 관점에서 바라볼 수 있도록 해야겠다.

 

저작자표시 비영리 변경금지

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

[객체지향의 사실과 오해]함께 모으기 -3  (0) 2025.04.13
[객체지향의 사실과 오해] 함께 모으기 -2  (0) 2025.04.12
[객체지향의 사실과 오해] 객체 지도 -6  (0) 2025.04.11
[객체지향의 사실과 오해] 객체 지도 -5  (0) 2025.04.10
[객체지향의 사실과 오해] 객체 지도 -4  (0) 2025.04.09
'📚 개발자의 서재/객체지향의 사실과 오해' 카테고리의 다른 글
  • [객체지향의 사실과 오해]함께 모으기 -3
  • [객체지향의 사실과 오해] 함께 모으기 -2
  • [객체지향의 사실과 오해] 객체 지도 -6
  • [객체지향의 사실과 오해] 객체 지도 -5
l'avenirJun
l'avenirJun
  • l'avenirJun
    오늘도 꾸준히 개발
    l'avenirJun
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 📚 개발자의 서재 N
        • 객체지향의 사실과 오해
        • Good Code, Bad Code
        • 도메인 주도 개발 시작하기 N
      • 🔧 트러블 슈팅
      • Java
      • Spring
      • 운영체제
        • 공룡책 학습
      • 알고리즘
      • GIT
      • 면접 지식
      • Spring 단기심화 2기
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
l'avenirJun
[객체지향의 사실과 오해] 함께 모으기 -1
상단으로

티스토리툴바