반응형
기능 설계 vs 구조 설계
- 기능 설계 : 제품이 사용자를 위해 무엇을 할 수 있는지에 초점
- 구조 설계 : 제품의 형태가 어떠해야 하는지에 초점
훌륭한 기능은 훌륭한 소프트웨어를 만드는 충분조건
훌륭한 구조는 훌륭한 소프트웨어를 만드는 필요조건
- 성공적인 소프트웨어는 훌륭한 기능을 제공하는 동시에 사용자의 요구를 빠르고 안정적으로 추가할 수 있어야 함
- 기능이 아니라, 구조를 기반으로 모델을 구축하는 것이 이해하기 쉽고 변경에 안정적 (기능은 계속 변하기 때문)
- 안정적인 구조를 설계하면 변경에 대비하고 변경의 여지를 남겨놓을 수 있음
객체지향 > 기능분해
- 객체지향 : 기능을 더 작은 책임으로 분할하고, 책임을 객체에 분배함으로써 기능이 객체의 구조를 따르게 만듦
- 기능분해 : 기능을 중심으로 설계한 후 구조가 기능을 따르게 함 ( -> 기능이 변경될 경우 소프트웨어 전체가 변경될 수 있음)
두 가지 재료: 기능과 구조
- 구조 : 사용자나 이해관계자들이 도메인(domain)에 관해 생각하는 개념과 개념들 간의 관계
- 기능 : 사용자의 목표를 만족시키기 위해 책임을 수행하는 시스템의 행위
- 도메인 모델링 : 구조를 수집하고 표현하기 위한 기법
- 유스케이스 모델링 : 기능을 수집하고 표현하기 위한 기법
안정적인 재료: 구조
- 도메인 모델
- 도메인 : 사용자가 프로그램을 사용하는 대상 분야
- 모델 : 대상을 선택적으로 단순화하고 의식적으로 구조화한 형태 (대상을 추상화하고 단순화한 것)
- 도메인 모델 : 사용자가 프로그램을 사용하는 대상 영역에 관한 지식을 선택적으로 단순화하고 의식적으로 구조화한 형태
이해관계자들이 바라보는 멘탈 모델
- 멘탈 모델 : 사람들이 자신이 상호작용하는 것들에 대해 갖는 모형
(사람들은 제품이 자신의 멘탈 모델과 유사한 방식으로 작동할 것이라고 기대함)
- 사용자 모델 : 사용자가 제품에 대해 가지고 있는 개념들의 모습
- 디자인 모델 : 설계자가 마음 속에 갖고 있는 시스템에 대한 개념화
- 시스템 이미지 : 최종 제품
- 사용자와 설계자는 최종 제품(시스템 이미지)를 통해서만 상호작용
∴ 디자인 모델을 기반으로 만든 시스템 이미지가 사용자 모델을 정확하게 반영하도록 노력해야 함
- 표현적 차이 (의미적 차이) : 소프트웨어 객체와 현실 객체 사이의 의미적 거리
- 도메인 모델을 기반으로 설계•구현 ⇒ 표현적 차이↓ ⇒ 멘탈 모델 반영↑
- 도메인 모델(사용자 모델)에 포함된 개념과 규칙은 변경될 확률이 비교적 적음 (구조가 안정적)
∴ 도메인 모델을 기반으로 설계•구현 ⇒ 변경에 유연하게 대응 가능 - 객체지향 ⇒ 도메인에 대한 사용자 모델, 디자인 모델, 시스템 이미지 모두가 유사한 모습을 유지
(객체지향의 특징 中 연결완전성) - 객체지향에서는 도메인 모델과 코드 모두 동일한 모델링 패러다임 공유
∴ 코드의 수정 = 모델의 수정
(객체지향의 특징 中 가역성)
불안정한 재료: 기능
- 유스케이스 : 사용자의 목표를 달성하기 위해 사용자와 시스템 간에 이뤄지는 상호작용의 흐름을 텍스트로 정리한 것
- 사용자 목표라는 문맥으로 각 기능과 시나리오를 묶어줌으로써 각 기능이 유기적인 체계를 이룰 수 있게 함
- 사용자와 시스템 간의 상호작용을 일련의 이야기 흐름으로 표현
- 하나의 시나리오가 아니라 여러 시나리오들의 집합 (시나리오 = 유스케이스 인스턴스)
- 단순한 피쳐(feature) 목록과 다름 (피쳐는 독립적인 기능이고, 유스케이스는 이야기를 통해 연관된 피쳐들을 묶은 것)
- 사용자 인터페이스와 관련된 세부 정보를 포함하지 말아야 함 (= 본질적인 유스케이스)
(∵ 사용자 인터페이스는 자주 변경됨) - 내부 설계와 관련된 정보를 포함하지 않음
(∵ 유스케이스의 목적은 내부 설계를 설명하는 것이 아니라, 연관된 시스템 기능을 이야기 형식으로 모으는 것)
재료 합치기: 기능과 구조의 통합
- 책임-주도 설계 ⇒ 유스케이스와 도메인 모델 통합
- 사용자의관점에서 시스템 기능 명시 (유스케이스) → 안정적 구조(도메인 모델)에 기반한 객체들에게 책임 분배
- 방법
- 기능 → 책임 (유스케이스 → 도메인 모델)
- 책임을 분할해서 객체들에게 할당 (협력하는 객체들의 공동체 형성)
(책임 수행에 필요한 정보를 가진 객체에게 그 책임 할당 ⇒ 관련된 상태와 행동을 합께 캡슐화 ⇒ 자율적인 객체) - 객체를 클래스로, 책임을 클래스의 메서드로 변환
(도메인 모델의 속성 → 클래스의 인스턴스 변수)
(협력 안에서의 책임 → 클래스의 메서드)
반응형
'개발 도서 > 객체지향의 사실과 오해' 카테고리의 다른 글
[객체지향의 사실과 오해] 부록A : 추상화 기법 (0) | 2023.04.04 |
---|---|
[객체지향의 사실과 오해] 07장 : 함께 모으기 (0) | 2023.03.31 |
[객체지향의 사실과 오해] 05장 : 책임과 메시지 (0) | 2023.03.13 |
[객체지향의 사실과 오해] 04장 : 역할, 책임, 협력 (1) | 2023.03.13 |
[객체지향의 사실과 오해] 03장 : 타입과 추상화 (0) | 2023.03.13 |