코드로 우주평화

도메인과 유스케이스, 유지보수하기 쉽고 유연한 객체지향 시스템 본문

나는 이렇게 본다/객체지향의 사실과 오해

도메인과 유스케이스, 유지보수하기 쉽고 유연한 객체지향 시스템

daco2020 2022. 4. 16. 00:16

* 이 글은 책을 읽고 주관적인 생각과 함께 요약 정리한 글입니다.

 

 

 

제목 : 객체지향의 사실과 오해

저자 : 조영호

범위 : 06 객체지도

 

 


 

요약 정리

 

  • 설계
    • 객체지향은 자주 변경되는 '기능'이 아니라 안정적인 '구조'를 기반으로 시스템을 구조화한다. (구조 중심 설계)
    • 기능 측면 설계는 사용자를 위해 무엇을 할 수 있는지에 초점을 맞춘다. (충분조건)
    • 구조 측면 설계는 서비스의 형태가 어떠해야 하는지에 초점을 맞춘다. (필요조건)
    • 기능과 구조는 조화를 이루어야 한다.
    • 소프트웨어는 요구사항이 항상 변경된다. 이 '변경' 때문에 설계가 필요한 것이다.
    • 예측 불가능한 변경에 유연하게 대처할 수 있는 안정적인 구조를 설계해야한다.
    • 좋은 설계는 나중에라도 변경할 수 있는 여지를 남겨 놓는 설계다.
    • 즉, 설계의 목표는 변경에 소요되는 비용을 낮추는 것이다.
  • 도메인 모델링 - 구조를 수집하고 표현하기 위한 기법
    • 구조는 사용자나 이해관계자들이 도메인에 관해 생각하는 개념과 개념들 간의 관계로 표현한다.
    • 사용자가 프로그램을 사용하는 분야를 도메인이라고 한다.
    • 도메인 모델은 소프트웨어 개발과 관련된 이해관계자들이 도메인에 대해 생각하는 관점이다.(심적표상)
    • 최종 코드는 사용자가 도메인을 바라보는 관점을 반영해야 한다.
    • 객체지향은 이런 요구사항을 가장 범용적으로 만족시킬 수 있는 거의 유일한 모델링 패러다임이다.
    • 표현적 차이 : 소프트웨어 객체와 현실 객체 사이의 의미적 거리를 가리켜 표현적 차이, 의미적 차이라고 한다.
    • 현실과 소프트웨어 사이의 차이를 줄이는 것이 도메인 모델이다.
    • 표현적 차이가 줄어들면 코드와 구조를 이해하기 쉽고 변경에도 쉽게 대처할 수 있다.
  • 유스케이스 모델링 - 기능을 수집하고 표현하기 위한 기법
    • 소프트웨어의 존재 이유는 사용자가 원하는 목표를 달성할 수 있는 기능을 제공하는 것이다.
    • 사용자와 시스템 간에 이뤄지는 상호작용을 텍스트로 정리한 것을 유스케이스라고 한다.
    • 다이어그램이 집착하지 말고 이야기에 집중하라.
    • 유스케이스는 이야기를 통해 연관된 기능들을 함께 묶을 수 있다.
    • 사용자 인터페이스는 포함하지 않는다. 시스템의 행위에 초점을 맞춘다.
    • 단지 사용자가 시스템을 통해 무엇을 얻고 어떻게 상호작용하는지에 집중한다.
    • 유스케이스는 객체지향과는 상관이 없으며 엄밀히 설계기법은 아니다.
  • 객체 설계
    • 변경에 유연한 소프트웨어를 만들기 위해서는 유스케이스에 정리된 시스템의 기능을 도메인 모델을 기반으로 한 객체들의 책임으로 분배해야한다.
    • 객체 설계란, 요구사항들을 식별하고, 도메인 모델을 생성한 후, 객체들 간의 메시지 전송을 정의하고, 클래스에 메서드를 추가하는 것.
    • 객체의 이름은 도메인으로부터 차용하자.
    • 객체 책임 할당의 기본 원칙은 책임을 수행하는 데 필요한 정보를 가진 객체에게 그 책임을 할당한다.
    • 연결완전성 : 도메인 모델링 기법과 도메인 프로그래밍 기법이 동일하다. 때문에 모델링에서 사용한 개념은 객체와 클래스로 매끄럽게 변환할 수 있다. 이는 객체지향의 큰 장점이며 이 같은 특성을 연결완정성이라고 한다.
    • 가역성 : 연결완정성과 반대로 코드에서 모델로의 매끄러운 흐름을 가역성이라고 한다.
  • 정리 
    • 사람들이 동일한 용어와 동일한 개념을 이용해 의사소통하고 코드로부터 도메인 모델을 유추할 수 있게 하는 것이 도메인 모델의 진정한 목표다.
    • 도메인 모델과 코드를 밀접하게 연관시키기 위해 노력하다. 그것이 유지보수하기 쉽고 유연한 객체지향 시스템을 만든다.

 

 

 

하고 싶은 말

  • 구조와 설계가 왜 중요한지 알게되었고 그 해답은 도메인에 있다는 것도 알게되었다.
  • 좋은 설계, 좋은 코드를 작성하려면 도메인 지식도 반드시 필요해 보인다.
  • 정리한 내용으로 미루어 볼 때, 결국 모든 제품의 목표는 고객만족에 귀결된다고 생각한다.