본문 바로가기
Study/UML

[UML] 클래스 다이어그램(Class Diagram)

by 스테디코디스트 2023. 10. 4.
반응형

<클래스 다이어그램>

- 클래스 다이어그램은 구조 다이어그램으로 클래스 내부 구성요소 및 클래스 간의 관계를 도식화하여 시스템의 특정 모듈이나 일부 및 전체를 구조화한다.
- 클래스 다이어그램을 그리게 되면 시스템 내 클래스 간의 의존성 파악이 쉬워진다.
- 클래스 다이어그램은 목적에 따라 개념, 명세, 구현 단계로 나눌 수 있다.
- 개념 단계에서는 클래스만 도출하여 관계를 단순화하는 것을 목적으로 하고, 명세와 구현 단계에서는 개발 직전 설계나 구현 이후 설명 목적으로 한다.
 
 
<요소>
1. 클래스

- 클래스 다이어그램에서 클래스는 이름, 속성(변수), 메서드 순으로 나열한다.
- 속성과 메서드는 생략이 가능하지만 이름은 필수로 입력해야 한다.
- 속성이나 메서드 앞에 붙은 "+, -, #, ~"은 각각 public / private / protect / default를 의미한다.
- {readonly}가 final을 의미하고, 밑줄은 static을 의미한다.

(final은 java에서 사용하는 용어로 c#에서는 sealed와 비슷한 의미로 더 이상 재정의 될 수 없음을 의미한다.)

- [*]나 [0...1]은 리스트와 같은 변수에 지정된 사이즈를 뜻하는데, *은 정해지지 않은 사이즈를 의미하고 [0...1]은 0개이거나 1개임을 의미한다. 또한 미리 사이즈를 지정한다면 [3]과 같은 형태로 표현도 가능하다.
- 속성(변수)은 {접근제어자}{필드명} : {타입} 순으로 작성한다.
- 메서드는 {접근제어자}{메서드명}{파라미터타입} : {반환타입} 순으로 작성한다.

 

2. 스테레오 타입

- 인터페이스나 추상 클래스와 같은 요소를 표기하기 위해 "<<>>"(길러멧)과 같은 문법을 사용한다.
- 길러멧은 클래스명 위에 작은 글씨로 작성하고, 보통 인터페이스, enum, 추상클래스 등에서 사용되지만 확장 클래스를 의미하는 데에도 사용할 수 있다.
 
3. 클래스 간 관계

1) Association(연관)
- 다른 객체의 참조를 가지고 있을 때 사용한다.
- 방향이 있는 실선과 방향이 없는 실선 두 가지로 연관 관계를 나타낼 수 있다.
- "A →B"의 경우 A가 B를 참조한다는 의미
- "AㅡB의 경우 A가 B를 또는 B가 A를 참조할 수도 있고, 둘 다 참조 이거나 둘 다 참조가 아니거나 일 수 있다.
- 아래 그림은 모두 동일한 코드를 의미한다.

2) Inheritance(상속, 일반화)
- 상속 관계를 나타내고 Generlization(일반화)라고도 많이 부른다.
- 부모 클래스와 자식 클래스 간의 상속 관계를 나타낼 때 사용한다.
- A ㅡ▷B는 'A가 B를 상속받음'을 의미한다.

3) Realization/ Implementation(실체화)
- 인터페이스를 상속하여 클래스에서 실제 기능을 실현화할 때 사용한다.
- 아래와 같이 두 가지 형태로 표현할 수 있다.

 
4) Dependency(의존)
- 클래스 간 참조 관계를 나타낼 때 사용한다.
- Association은 변수로 다른 클래스와 연관이 있을 때 사용하고, Dependency는 메서드의 파라미터나 반환에 사용되는 클래스 관계를 나타낼 때 사용한다.
- 즉 Association 관계는 해당 클래스의 멤버 변수로 할당할 때 사용하고 Dependency 관계는 로컬 변수, 파라미터, 반환 값으로 호출되는 메서드가 실행되는 동안에만 유지될 때 사용한다.

5) Aggregation(집합)
- 집합 관계를 나타낼 때 시용한다.(전체ㅡ부분)
- Association의 관계를 좀 더 특수하게 나타낼 때 사용된다.
- Collection이나 Array를 이용할 때 주로 사용한다.
- Association으로 이 관계를 표현할 수 있어서 지금도 논란 중이라고 한다.(Association으로 사용하면 될 듯)
 
6) Composition(합성)
- Aggregation과 비슷하게 전체ㅡ부분의 관계를 나타낼 때 사용하지만 Aggregation보다는 더 강력한 집합을 의미할 때 사용한다.
- 합성 관계에서는 부분이 전체에 종속적이고 라이프 사이클을 관리한다고 볼 수 있다.