Challenge, and Growth ! Who am I
                                                                                                             

Welcome to my blog 🫧

Total

Today

Yesterday













Knowledge/디자인 패턴

클래스 다이어그램 그리기 - 기본편

뽀시라운 2024. 4. 6. 15:20
반응형
SMALL

 

[목차여기]

 

 

UML 클래스 다이어그램에 대해서 공부하기 전에 아래 게시글을 먼저 참고하면 좋을 것 같다. 

 

UML이란? - UML을 사용하는 이유

[목차여기] UML(Unified Modeling Language) UML은 통합 모델링 언어이다. '통합', '모델링', '언어' 이렇게 단어를 하나씩 떼어 보면 그 정의를 짐작할 수 있다. 소프트웨어 개념을 다이어그램으로 그리기

proysm.tistory.com

 

클래스 다이어그램

아래 사진을 보면, 클래스 다이어그램이 어떻게 생겼는지 알 수 있다. UML 클래스 다이어그램은 클래스 멤버 변수, 멤버 함수를 표현할 수 있고 상속, 연관(참조), 집합 관계 등 표현할 수 있다. 다시 말해, 소스코드에 있는 클래스 사이의 모든 의존 관계를 표기할 수 있다. 그래서 클래스 다이어그램이 아주 유용하며 UML 다이어그램 중 가장 유명하다.

 

[그림1] 클래스 다이어그램 예시

 

 

클래스 다이어그램 그리기

클래스 사이의 관계

클래스 다이어그램을 그리는 방법을 알아보기 전에, 클래스 관계의 종류를 알아야 한다.

 

1. 연관(참조)

클래스 사이에 연관은 다른 객체의 참조를 가지는 인스턴스 변수를 의미한다. 이것이 정석적인 풀이인데 사실 이해하기 어려운 말인 것 같다. 쉽게 말해서 A라는 클래스에서 B라는 클래스의 객체를 선언하고(만들고) 그것을 사용하면 A가 B를 참조하고 있다고 할 수 있다.

 

연관인 경우 소스코드와 클래스 다이어그램은 다음과 같다. * 클래스는 사각형으로 그려주면 된다!

public class Oven {
	private Button buttons[15];
}

 

[그림2] 클래스 다이어그램 참조 예시

 

Oven이 Button을 사용하고 있으므로 클래스 다이어그램은 Oven에서 Button으로 화살표가 향하도록 그려준다. 이때, buttons 앞에 -가 붙은 것을 볼 수 있는데 이것은 접근제어자라고 한다. 접근제어자란, Oven이 Button을 어떤 식으로 접근하고 있는지 표현하는 것인데 그림은 private 인 경우다. 그리고 소스코드와 그림 2에서 객체가 15개 연결되어 있다. 클래스 다이어그램에서는 15 숫자만 작성해 주면 된다.

접근 제어자
public +
private -
protected #
package ~

 

 

 

만약 개수에 제한이 없는 경우에는 *라고 작성하면 된다. 개수에 제한이 없는 경우는 다음과 같은 경우다.

public class RecipeBook {
	public Vector recipes;
}

 

[그림3] 클래스 다이어그램 참조 예시2

 

이번에는 public으로 접근제어자를 사용하였고 *를 통해 개수의 제한이 없다는 것을 알 수 있다.

 

2. 상속

상속은 어떤 클래스가 다른 클래스의 일종인 경우다(is-a 관계). Java에서 extends를 통한 상속을 생각하면 된다. 내가 클래스 다이어그램을 그리면서 알게 된 팁은, 상속과 연관을 헷갈리지 않기 위해 상속은 세로로, 연관은 가로로 그려준다.

 

상속을 표현하는 소스코드와 클래스 다이어그램은 다음과 같다.

public class Shape { ... }
public Class Rectangle extends Shape{ ... }

interface UserDB { ... }
public class UserDBImpl implements UserDB{ ... }

[그림4] 클래스 다이어그램 상속 예시

 

부모 클래스에게 뚱뚱한 화살표를 그려서 이어주면 된다. 실선과 점선의 차이는 interface를 상속하느냐, 일반 class를 상속하느냐의 차이다. UserDB에게는 <<interface>>라고 표시해 주면 된다. Shape의 경우 추상클래스이기 때문에 Shape을 itelic 채로 작성하면 된다.

 

추상클래스 vs 인터페이스

앞으로 공부를 위해서 추상클래스와 인터페이스의 차이점을 알고 가는 것이 좋다.

 

 

 

3. 집합과 합성

집합은 한 클래스가 다른 클래스를 포함하는 경우다. Aggregation(집합)Composition(합성)이다. 합성이 훨씬 더 강력한 관계라고 생각하면 된다.

 

[그림5] 클래스 다이어그램 집합 예시

흰색 다이아몬드가 Aggregation, 검은색 다이아몬드가 Composition이다. 두 개의 차이점은 질문을 통해 쉽게 알 수 있다.

 

TrainStation이 사라진다면 Train의 의미가 사라지는가? NO => Aggregation

Train이 사라진다면 Wheel의 의미가 사라지는가? YES => Composition (바퀴 없는 기차는 의미가 없다. 자기 부상열차이면 모를까)

 

이 클래스 다이어그램을 해석하면 Train은 0개 또는 1개의 TrainStation에 소속될 수 있고, 소속되는 Train의 개수는 무한대이다. 그리고 1개의 Train에 4개~10개의 바퀴가 소속된다. 그리고 Train이라는 추상클래스를 상속받은 KTX, ITX 클래스가 있다.

 

 

정리

반응형
LIST
loading