본문 바로가기
Programming

UML : 클래스 다이어그램 표기법

by BTC_아리 2023. 7. 3.

베하!

안녕하세요 일단고 팀입니다!

저번 시간에는 UML 다이어그램의 종류와 특징 및 사용 목적에 대해서 알아보았습니다.

이번 시간에는 여러 종류의 UML 다이어그램 중 클래스 다이어그램에 대해서 자세히 알려드리겠습니다.

 

클래스 다이어그램

정적 구조 다이어그램으로, 클래스와 클래스가 가지는 속성, 클래스 간의 관계를 표현하여 소프트웨어 시스템의 구조를 분석하고 설계하는 데 사용합니다.

클래스에는 클래스 명, 속성(상태), 메서드(행위)가 존재합니다.

그럼, 클래스 간의 관계를 표현하기 위해 필요한 요소들에는 무엇이 있을까요?

 

접근 제어자

접근 제어자 표시 설명
public + 외부 클래스가 자유롭게 사용할 수 있습니다.
private - 같은 패키지 또는 자식 클래스에서 사용할 수 있습니다.
protected # 외부에서 사용될 수 없습니다.
package ~ 동일 패키지에 있는 클래스의 객체만 접근 가능합니다.

이를 토대로 한 클래스의 예시는 다음과 같습니다.

가장 윗부분이 클래스의 이름이고 중간 부분엔 private한 속성을 나타냈습니다. 마지막 부분엔 method를 나타내었는데, 이는 public하고 파라미터의 속성이 Integer이라는 것을 알 수 있습니다.

 

관계 표현

클래스 간의 관계를 선과 화살표를 통해 표시할 수 있습니다.

설명과 예시를 보여드리겠습니다.

이미지 출처 : https://www.nextree.co.kr/p6753/

 

- Generalization : 일반화 관계

객체지향 개념에서 상속 관계(is a kind of)를 의미합니다.

한 클래스가 다른 클래스를 포함하는 상위 개념일 때 두 클래스 사이에는 일반화 관계가 존재한다고 합니다. 예를 들어, 가전제품은 TV의 상위 개념입니다.

 

- Realization : 실체화 관계

인터페이스에 정의된 Spec을 오버라이딩하여 구현한 관계를 점선과 비어있는 화살표로 표현합니다. 이는 can do this 관계라고 할 수 있습니다.

 

- Dependency : 의존 관계

한 클래스가 다른 클래스에서 제공하는 기능을 사용할 때 의존 관계를 사용합니다.

두 클래스의 관계가 하나의 메서드를 실행하는 시간과 같이 매우 짧은 시간 유지되는 경우를 말합니다.

이미지 출처 : https://question0921.tistory.com/946

 

- Association : 연관 관계 & Directed Association : 직접 연관 관계

연관 관계는 개념상 서로 연결되어 있음을 나타내며, 연관 관계가 어떻게 되는지 숫자를 통해 표시합니다. 이러한 숫자를 다중성이라고 할 수 있습니다.

이미지 출처 : https://defacto-standard.tistory.com/102

연관 관계는 두 개 이상의 클래스 간의 관계를 나타냅니다. 이 관계는 양방향 또는 단방향일 수 있습니다.

이미지 출처 : https://defacto-standard.tistory.com/102

직접 연관 관계는 단방향 연관 관계를 의미합니다.

이미지 출처 : https://defacto-standard.tistory.com/102

 

- Aggregation : 집합 (집합연관) 관계 & Composition : 합성 (복합연관) 관계

집합 관계와 합성 관계는 클래스 간의 포함 관계를 나타냅니다.

집합 관계는 라이프 타임이 독립적이며, 합성 관계는 라이프 타임이 의존적이라는 차이점이 있습니다. 여기서 라이프 타임이 독립적이란 말은 전체 객체가 메모리에서 사라져도 부분 객체는 사라지지 않는다는 의미입니다. 또한 라이프 타임이 의존적이란 것은 전체 객체가 없어지면 부분 객체도 없어진다는 것을 의미합니다.

이미지 출처 : https://gmlwjd9405.github.io/2018/07/04/class-diagram.html

추가 예시로 집합 관계는 회사와 직원의 관계와 같으며, 합성 관계는 자동차와 엔진의 관계와 같습니다.

 


이렇게 클래스 다이어그램을 어떻게 작성하는지 알아보았습니다.

유익한 시간이었으면 좋겠습니다.

그럼 다음 시간에 만나요!

 

'Programming' 카테고리의 다른 글

[C#] .NET Winform Event 만들기 예제  (0) 2023.07.07
안드로이드 앱개발(1)  (0) 2023.07.06
AOP란?  (0) 2023.06.26
[Vue]Vuex 핵심 개념  (0) 2023.06.25
Keycloak  (0) 2023.06.23

댓글