[소프트웨어 공학] - UML: 정적 모델링 다이어그램 (Static Diagram)
정적 모델링 다이어그램 (Static Modeling Diagram)
UML에서 정적 모델링이란 객체들의 공통 구조와 동작들을 추상화(모델링)시킨 것으로, 객체지향 개념으로부터 시작한다. 즉, 객체지향의 핵심 개념(클래스, 객체, 캡슐화, 상속 등)을 시각적으로 표현한 것이 정적 모델링이다. 대표적인 정적 모델링 다이어그램의 종류는 다음과 같다.
다이어그램 | 설명 | 사용 시점 |
클래스 다이어그램 (Class Diagram) |
시스템의 클래스와 클래스 간의 관계를 표현한다. | 설계 단계 (특히 상세 설계) |
객체 다이어그램 (Object Diagram) |
클래스 다이어그램을 바탕으로 특정 시점의 객체 상태를 보여준다. | 설계 or 테스트 시나리오 설명 |
컴포넌트 다이어그램 (Component Diagram) |
시스템을 구성하는 컴포넌트(모듈) 간의 의존 관계를 표현한다. | 아키텍처 설계 단계 |
배치 다이어그램 (Deployment Diagram) |
하드웨어와 소프트웨어의 배치 구조를 표현한다. (서버, DB 등) | 배포/운영 설계 단계 |
패키지 다이어그램 (Package Diagram) |
클래스나 컴포넌트를 패키지 단위로 묶어서 구조를 표현한다. | 대규모 시스템의 구조 설명 |
클래스 다이어그램 (Class Diagram)
UML에서 정적 모델링을 표현할 때, 주로 “클래스 다이어그램”을 사용한다. 시스템의 도메인 개념을 나타낼 때 사용하고, 클래스 사이의 관계를 나타낸다. 클래스 다이어그램을 그린다는 것은 응용 문제를 개념화하는 것이고, 이때 “분류(Classification)” 과정이 중요하다. 클래스 다이어그램은 시스템 내에서 시간 요소가 없는 모델인 “정적 측면”을 모델링한다.
클래스 (Class)
UML에서 클래스는 박스로 나타내고, 박스 안에는 클래스 이름을 표시한다. 박스 안에서 3개의 구역으로 나누어, 클래스 이름, 속성, 오퍼레이션을 나타낼 수 있도록 한다.
속성 (Attribute)
클래스가 갖고 있는 자료에 이름을 붙인 것이 속성이다. 이때, 속성의 형식은 주로 다음과 같이 나타낸다.
NOTE!
속성 형식: 가시성 / 변수 이름 : 타입 다중성 = 디폴트값 {속성}
- `가시성(Visibility)`: 속성에 대한 접근성을 나타낸다.(Ex: public, private, protected … )
- `속성 이름(Attribute Name)`: 속성을 나타내는 명사로 구성된 이름 (EX: name, age, … )
- `타입(Type)`: 속성의 타입 (Ex: String, int, … )
- `다중성(Multiplicity)`: 자료가 참조하는 객체의 수 (Ex: 1, 0..1, 1..*, … )
- `디폴트(Default Value)`: 클래스 인스턴스가 생성될 때 속성에 할당되는 기본 값
- `속성(Attirbute)`: 속성에 대한 추가 속성 (Ex: ordered, unordered, unique)
오퍼레이션 (Operation)
오퍼레이션은 클래스의 동작을 의미하며, 클래스에 속하는 객체에 대해 적용될 메서드를 정의한 것이다. 오퍼레이션은 동작에 대한 인터페이스를 지칭한다. 이때, 오퍼레이션의 형식은 주로 다음과 같이 나타낸다.
NOTE!
오퍼레이션 형식: 가시성 오퍼레이션 이름(매개변수, ) : 반환 타입 { 속성 }
- `가시성(Visibility)`: 오퍼레이션에 대한 접근 수준을 나타낸다. (Ex: public, private, protected, package)
- `오퍼레이션 이름(Operation Name)`: 동작을 의미하는 동사 형태의 이름을 말한다. (Ex: calculateSalary, getName, printReport)
- `매개변수(Parameter)`: 오퍼레이션 수행에 필요한 입력 값들로, 이름과 타입을 함께 명시한다. (Ex: base: int, bonus: int)
- `반환 타입(Return Type)`: 오퍼레이션 실행 결과의 데이터 타입 (Ex: int, String, void)
정적 속성과 오퍼레이션 (Static Attribute/Operation)
속성과 오퍼레이션은 클래스 또는 클래스의 객체와 연관될 수 있다. 이때, 클래스와 연관되는 속성을 클래스 속성이라 하고 값은 해당 클래스의 모든 객체 사이에 공유된다. 그리고 클래스의 오브젝트와 연관된 속성을 인스턴스 속성이라 하며 값은 객체마다 다르다.
오퍼레이션 또한 정적으로 선언 가능하고, 정적 오퍼레이션은 클래스와 연관되어 정적 속성만 접근 가능하다. 정적이 아닌 오퍼레이션은 각 객체와 관련되어 호출된 객체에 대해 작동한다.
정적 속성과 오퍼레이션은 밑줄을 그어 구별한다.
관계 (Relationship)
클래스 다이어그램은 클래스 요소와 관계를 보여준다. 이때 관계란 클래스 단위 또는 객체 사이의 관계로 네 가지가 있다. 각 네 가지 유형의 관계는 선 및 화살표 스타일로 구분된다.
- `연관(Association)`: 객체 사이에 관련되어 연결되어 있음을 의미한다. 연관은 시간이 지나도 유지되는 관게이다. 구조적으로 연관을 맺어 정보를 참조하는 관계이다. 연관은 두 클래스 사이에 실선으로 표시한다. 이때, 화살표가 있는 경우는 단방향으로 탐색이 가능하다는 것이고, 화살표가 없으면 양방향 탐색이 가능하다는 것이다. (Student — Lecture)
- `상속(Generalization)`: 일반화 관계로, 자식 클래스가 부모 클래스의 속성과 오퍼레이션을 상속받는 관계이다. 실선 삼각형 화살표로 표시하며, 화살표 방향은 구체적인 클래스로부터 일반적인 클래스로 간다. (Rectangle → Shape)
- `의존(Dependency)`: 한 클래스가 다른 클래스의 기능을 일시적으로 사용하는 관계로, 클래스 간의 약한 결합을 나타낸다. 한 클래스의 변경으로 인해 다른 클래스의 변경이 필요할 수 있는 의존성을 나타낸다. 의존은 점선 화살표로 표시한다. (Order - → Payment)
- `구현(Implement)`: 인터페이스와 이를 구현하는 클래스 간의 관계를 나타낸다. 즉, 정의된 인터페이스를 구현 관계의 클래스에서 구현하고 인터페이스가 사용된 곳에서는 인터페이스를 구현하는 모든 클래스의 인스턴스가 사용될 수 있다. 구현 관계는 점선 삼각형 화살표로 표시한다. (Circle - → Drawable)