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