Modeling
모델링
- 문제 영역에서 핵심만을 추출하여 모델을 만드는 일련의 과정을 의미한다.
Model (모델)
- Problem Domain에서 실제적인 혹은 가상적인 것(Real or Imaginary Things)을 표현한 것을 의미한다.
- 유용한 모델은 세부사항들을 지나치게 상세하거나, 지나치게 개괄적이지 않고, 적절한 수준으로 표현할 수 있어야한다.
- 대부분의 System Development Model들은 Diagram 형태로 표현된다.
Modeling Techniques (모델링 테크닉)
- Simplicity of Representation
- 문제해결에 필요한 것들만 보인다. - Completeness
- 필요한 것들은 빠짐없이 보인다. - Internal Consistency
- 일관되게 표현한다. - Hierarchical Representation
- 시스템의 규모를 계층적으로 나누고, 하위 레벨에서 보다 더 자세히 표현한다.
- Architecture > Subsystem > Component
Diagram (다이어그램)
- 실제 세계의 Things와 Action을 핵심만 추출하여 Abstraction Shape으로 표현한 것을 의미한다.
- 다이어그램은 Rule 혹은 Standard를 따라가야 하며,
Rule과 Standard는 그것을 본 사람들이 모두 똑같이 이해할 수 있도록 직관적으로 수립되어야 한다.
Objective of Using Diagram (다이어그램을 사용하는 목적)
- Generate New Ideas and Possibilities
- Communicate Ideas
- Understand Structures and Relationships
- Test Ideas and Make Predictions
Example. Activity Diagram of Producing Book
|
|
Activity Diagram | Hiding Detail |
Unified Modeling Language (UML; 통합 모델링 언어) (URL)
- Object-Oriented Analysis and Design을 목적으로 한 모델링 언어이다.
- Rational Software사에서 제안한 UML 1.1이 OMG(Object Management Group, URL)에 의해 표준으로 채택된 이래로
꾸준히 Update되며 사용되고 있다.
Modeling Criteria (디자인 평가기준)
- 좋은 소프트웨어 모델링을 위한 기준은 아래와 같이 두 가지로 존재한다.
- Coupling (결합력)
- Cohesion (응집력)
Criteria | Measures | Description |
Coupling (결합력) |
- Object간 주고받는 Message Type(Function)의 수 - 주고받는 Message에 Passing되는 Parameter의 수 |
- 결합력이 작을수록, Reuse와 Encapsulation에 용이하고, 타 Object의 수정에 대응하기 쉽다. |
Cohesion (응집력) |
- Single Purpose에 Contribution하는 정도 | - 단일 목적만을 충실히 수행할수록, 사용하기 간편하고 다른 기능에 대한 의존도가 낮아진다. |
Coupling (결합력)
- Design Component(Class, Subsystem, System 등) 사이의 Interconnectedness(연관됨)의 정도이다.
- 한 Object가 다른 Object에게 보내는 Message Type의 개수가 Coupling의 정도를 결정한다.
즉, 두 Object 간에 호출하는 Function의 개수 혹은 Passing되는 Parameter의 개수가 많을수록 Coupling이 높아진다.
- Encapsulation(캡슐화), Modulization(모듈화) 등은 모두 Coupling을 낮추는 메커니즘들이다.
- Coupling은 아래와 같이 세분화될 수 있다.
- Inheritance Coupling
- 한 Subclass가 Superclass로부터 정말 필요한 Attribute 및 Operation만을 상속받는지에 대한 정도이다.
- 필요하지 않은 것들을 상속받을수록 Inheritance Coupling이 증가한다.
Cohesion (응집력)
- 어떤 Element(Operation, Class, Component 등)가 Single Purpose(단일 목적)에
얼마나 Contribution하는지의 정도이다.
- "하나"의 목표를 얼마나 충실히 달성하는가에 대한 척도이다.
- Cohesion은 아래와 같이 세분화될 수 있다.
- Operation Cohesion
- 어떤 Operation이 하나의 목적을 충실히 이행하는가에 대한 정도이다.
- 기능이 많은 함수는 범용성은 좋을지언정, 응집력은 떨어지는 함수이다. - Class Cohesion
- 어떤 Class가 하나의 요구사항만을 정확히 모델링하고 있는가에 대한 정도이다.
- 하나의 Class가 여러 요구사항을 반영하고 있는 경우, Class Cohesion이 떨어지는 Class이다. - Specialization Cohesion
- Class간 Inheritance 관계에서
적절한 IS-A Relationship 혹은 HAS-A Relationship을 이루고 있는가에 대한 정도이다.
Reference: Software Engineering 10th Edition
(Ian Sommerville 저, Pearson, 2016)
Reference: Object-Oriented Systems Analysis and Design Using UML 4th Edition
(Simon Bennett, Steve McRobb, Ray Farmer 저, McGrawHill, 2010)