[OOP] 객체지향의 사실과 오해 Chapter 6~7 객체지향 설계 [完]

janeljs·2021년 2월 12일
0
post-thumbnail

도메인 모델

  • 도메인 + 모델
    • 도메인: 사용자가 프로그램을 사용하는 대상 분야
    • 모델: 지식을 선택적으로 단순화하고 의식적으로 구조화한 형태
  • 도메인 모델 → 사용자가 프로그램을 사용하는 대상 영역에 관한 지식을 선택적으로 단순화하고 의식적으로 구조화한 형태
  • 객체지향의 가장 큰 장점은 도메인을 모델링하기 위한 기법과 도메인을 프로그래밍하기 위해 사용하는 기법이 동일하다는 것이다.
    → 도메인 모델링에서 사용한 객체와 개념을 프로그래밍 설계에서의 객체와 클래스로 변환할 수 있으며(연결완전성), 코드의 변경으로부터 도메인 모델의 변경 사항을 유추할 수 있다(가역성, reversibility).

Use case

  • 사용자의 목표를 달성하기 위해 사용자와 시스템 간에 이뤄지는 상호작용의 흐름텍스트로 정리한 것
  • 일차 액터(primary actor)라 불리는 행위자의 요청에 대한 시스템의 응답으로서, 다양한 조건하에 있는 시스템의 행위를 서술한다.

Use case의 특성

  • 사용자와 시스템 간의 상호작용을 보여주는 텍스트다.
  • 하나의 시나리오가 아니라 사용자의 목표와 관련된 모든 시나리오의 집합이다.
    • 시나리오를 use case instance라고 부르기도 한다.
  • 단순히 feature의 목록을 나타내는 것이 아니라 feature 간의 관계를 포함하고 있다.
    • Use case를 사용하면 연관된 기능들을 함께 묶을 수 있다.
  • 사용자 인터페이스와 관련된 세부 정보를 포함하지 않는다(essential use case).
  • 시스템의 내부 구조나 실행 메커니즘에 관련된 정보를 제공하지 않는다.

책임-주도 설계는 유스케이스로부터 첫 번째 메시지와 사용자가 달성하려는 목표를, 도메인 모델로부터 기능을 수용할 수 있는 안정적인 구조를 제공받아 실제로 동작하는 객체들의 협력 공동체를 창조한다. (p. 199)


객체 지향 설계 안에 존재하는 세 가지 관점

개념 관점(Conceptual Perspective)

  • 도메인 안에 존재하는 개념과 개념들 사이의 관계를 표현하는 것에 초점
  • 실제 도메인의 규칙과 제약을 최대한 유사하게 반영하는 것이 핵심이다.

    e.g. 커피 전문점이라는 도메인이 있을 때 메뉴판, 메뉴 항목, 손님, 바리스타, 커피 등의 객체 사이를 포함(containtment) 또는 연관(association) 등의 관계로 표현할 수 있다.

명세 관점(Specification Perspective)

구현 관점(Implementation Perspective)

  • 객체들이 책임을 수행하는 데 필요한 동작하는 코드를 작성하는 것에 초점

개념 관점, 명세 관점, 구현 관점은 동일한 코드를 바라보는 서로 다른 관점이며, 코드를 읽으며 세 가지 관점에 대응되는 요소가 명확히 드러나지 않는다면 각 관점이 명확히 드러나는 방향으로 수정함으로써 변화에 대한 코드의 유연성을 증가시킬 수 있다.


객체지향 설계 시 유념할 점

  1. 중요한 것은 설계가 아니라 코드다.
    → 협력을 구상하는 단계에 너무 오랜 시간을 쏟지 말고 최대한 빨리 코드로 구현하여 설계를 검증, 수정하자.
  2. 인터페이스를 결정할 때는 객체 내부에 대한 어떠한 가정도 하지 말아야 한다.
    → 먼저 객체의 책임을 결정한 후에 객체의 속성을 결정하자.
  3. 변화에 탄력적인 인터페이스를 만들어야 한다.
    → 클래스의 public 메서드는 다른 클래스가 협력할 수 있는 공용 인터페이스를 드러내며, 인터페이스의 수정은 해당 객체와 협력하고 있던 모든 객체에게 영향을 미친다. 따라서 최대한 변화에 안정적인 인터페이스를 설계하도록 노력하자.
  4. 인터페이스와 구현을 분리해야 한다.
    → 캡슐화를 위반하여 구현이 인터페이스 밖으로 노출되거나 인터페이스와 구현의 경계가 불명확하지는 않은지 확인하자.

Source

  • 객체지향의 사실과 오해 (조영호 저)

2개의 댓글

comment-user-thumbnail
2021년 4월 13일

와 제인 대박;; 이책도 다읽고;; 대단해여!!

1개의 답글