늦은 프로그래밍 이야기
UML 본문
UML
- Unified Modeling Language의 약자
- 1997년 OMG(Object Mangement Group)에서 표준으로 채택한 통합 모델링 언어.
목적
- 다른 사람들과의 의사소통 또는 설계 논의
- 전체 시스템의 구조 및 클래스의 의존성 파악
- 유지보수를 위한 설계의 back-end 문서
Class Diagram (클래스 다이어그램)

- 구조(Structure) 다이어그램 7개와 행위(Behavior) 다이어그램 7개로 구성.
- 구조 다이어그램 : 시스템의 개념, 관계 등의 측면에서 요소들을 나타내고 각 요소들의 정적인 면을 보기 위한 것.
- 행위 다이어그램 : 각 요소들 혹은 요소들 간의 변화나 흐름, 주고받는 데이터 등의 동작을 보기 위한 것.
- 클래스 다이어그램 : 클래스 내부의 정적인 내용이나 클래스 사이의 관계를 표기하는 다이어그램. 시스템의 일부 또는 전체의 구조를 나타낼 수 있다.
요소 (Element)
- 클래스 (Class)
- 보통 3개의 구획(compartment)으로 나누어 클래스의 이름, 속성, 기능을 표기.
- 속성과 기능은 생략이 가능하지만 이름은 필수로 명시.

- 필드와 메소드의 접근제한자, 필드명(메소드명), 데이터타입, parameter, 리턴 타입 등을 나타낼 수 있다.
- 하지만 UML 다이어그램은 필드나 메서드를 모두 선언하는 곳이 아니기 때문에 다이어그램을 그리는 목적에 필요한 것만 사용.
- 보통 3개의 구획을 사용하지만 다른 미리 정의되거나 사용자 정의 된 모델 속성을 나타내기 위한 추가 구획도 사용할 수 있다.
- 스테레오 타입 (Stereo Type)
- UML에서 제공하는 기본 요소 외에 추가적인 확장요소를 나타내는 것.
- 길러멧(gullemet, ≪≫) 사이에 적는다. (폰트 크기보다 작다)

- 밑줄은 static 필드(메소드)를 의미
- {readOnly}는 final 키워드를 사용하는 상수를 의미
- 추상 클래스, 추상 메소드 (Abstract)

- 추상 클래스의 이름과 메소드는 italic체나, {abstract} 프로퍼티를 사용하여 표기.
- {abstract} 프로퍼티로 표기하는 것이 쉽고 명확.
클래스간의 관계
- 클래스 간의 관계를 한눈에 쉽게 보고 의존 관계를 파악하는 것이 클래스 다이어그램의 주 목적.
- 따라서 클래스 다이어그램에서 가장 중요한 것이 클래스 간의 관계이다.

Generalization (일반화)
- 부모클래스와 자식클래스 간의 상속 관계를 나타낸다.
- 자식클래스가 주체가 되어 부모클래스로 Generalize 하는 것을 말한다.
- 반대의 개념은 부모클래스를 자식클래스로 Specialize(구체화) 하는 것.

- 클래스 사이에 실선을 연결하고, 부모클래스 쪽에 비어있는 삼각형으로 나타낸다.
Realization (실체화)
- 인터페이스의 spec(명세, 정의)만 있는 메소드를 오버라이딩 하여 실제 기능으로 구현 하는 것.

- 2가지 표기법
1) 인터페이스를 클래스처럼 표기하고 스테레오 타입을 추가한 후 인터페이스와 클래스 사이에 점선과 인터페이스 쪽의 비어있는 삼각형으로 연결.
2) 인터페이스를 원으로 표기하고 인터페이스의 이름을 명시한 후 인터페이스와 클래스 사이에 실선으로 연결.
Dependency (의존)
- 일반적으로 제일 많이 사용되는 관계, 어떤 클래스가 다른클래스를 참조하는 것.


- 클래스를 점선으로 연결 후 점선 끝에 화살표를 추가
- 스테레오 타입으로 어떤 목적의 Dependency인지 의미를 명확히 명시할 수도 있다.
Association (연관), Directed Association (방향성 있는 연관)
- 다른 객체의 참조를 가지는 필드를 의미.

1) 일반적인 Association
- 실선 하나로 클래스를 연결하여 표기.
- User가 Address를 참조할 수도, Address가 User를 참조할 수도, 또는 둘다일 수도 있다.
2) Directed Associaltion
- 클래스를 실선으로 연결 후 실선 끝에 화살표를 추가.
- 화살표가 의미하는 navigability(방향성). (참조하는 쪽과 참조 당하는 쪽을 구분)
- User가 Address를 참조하는 것.
- -addresses : roleName(역할명). Address가 User 클래스에서 참조될 때 어떤 역할을 가지고 있는지 의미.

3) 속성 표기법
- 2)의 다이어그램과 비슷한 의미를 가지고 있지만 여러 개의 객체에 대한 Container(컨테이너)가 List라는 것을 알려주고 있다.
'내일배움캠프 > Diagram' 카테고리의 다른 글
| Use Case Diagram (유스케이스) (0) | 2022.12.07 |
|---|