[목차여기]
UML 클래스 다이어그램에 대해서 공부하기 전에 아래 게시글을 먼저 참고하면 좋을 것 같다.
클래스 다이어그램
아래 사진을 보면, 클래스 다이어그램이 어떻게 생겼는지 알 수 있다. UML 클래스 다이어그램은 클래스 멤버 변수, 멤버 함수를 표현할 수 있고 상속, 연관(참조), 집합 관계 등을 표현할 수 있다. 다시 말해, 소스코드에 있는 클래스 사이의 모든 의존 관계를 표기할 수 있다. 그래서 클래스 다이어그램이 아주 유용하며 UML 다이어그램 중 가장 유명하다.
클래스 다이어그램 그리기
클래스 사이의 관계
클래스 다이어그램을 그리는 방법을 알아보기 전에, 클래스 관계의 종류를 알아야 한다.
1. 연관(참조)
클래스 사이에 연관은 다른 객체의 참조를 가지는 인스턴스 변수를 의미한다. 이것이 정석적인 풀이인데 사실 이해하기 어려운 말인 것 같다. 쉽게 말해서 A라는 클래스에서 B라는 클래스의 객체를 선언하고(만들고) 그것을 사용하면 A가 B를 참조하고 있다고 할 수 있다.
연관인 경우 소스코드와 클래스 다이어그램은 다음과 같다. * 클래스는 사각형으로 그려주면 된다!
public class Oven {
private Button buttons[15];
}
Oven이 Button을 사용하고 있으므로 클래스 다이어그램은 Oven에서 Button으로 화살표가 향하도록 그려준다. 이때, buttons 앞에 -가 붙은 것을 볼 수 있는데 이것은 접근제어자라고 한다. 접근제어자란, Oven이 Button을 어떤 식으로 접근하고 있는지 표현하는 것인데 그림은 private 인 경우다. 그리고 소스코드와 그림 2에서 객체가 15개 연결되어 있다. 클래스 다이어그램에서는 15 숫자만 작성해 주면 된다.
접근 제어자 | |
public | + |
private | - |
protected | # |
package | ~ |
만약 개수에 제한이 없는 경우에는 *라고 작성하면 된다. 개수에 제한이 없는 경우는 다음과 같은 경우다.
public class RecipeBook {
public Vector recipes;
}
이번에는 public으로 접근제어자를 사용하였고 *를 통해 개수의 제한이 없다는 것을 알 수 있다.
2. 상속
상속은 어떤 클래스가 다른 클래스의 일종인 경우다(is-a 관계). Java에서 extends를 통한 상속을 생각하면 된다. 내가 클래스 다이어그램을 그리면서 알게 된 팁은, 상속과 연관을 헷갈리지 않기 위해 상속은 세로로, 연관은 가로로 그려준다.
상속을 표현하는 소스코드와 클래스 다이어그램은 다음과 같다.
public class Shape { ... }
public Class Rectangle extends Shape{ ... }
interface UserDB { ... }
public class UserDBImpl implements UserDB{ ... }
부모 클래스에게 뚱뚱한 화살표를 그려서 이어주면 된다. 실선과 점선의 차이는 interface를 상속하느냐, 일반 class를 상속하느냐의 차이다. UserDB에게는 <<interface>>라고 표시해 주면 된다. Shape의 경우 추상클래스이기 때문에 Shape을 itelic 채로 작성하면 된다.
추상클래스 vs 인터페이스
앞으로 공부를 위해서 추상클래스와 인터페이스의 차이점을 알고 가는 것이 좋다.
3. 집합과 합성
집합은 한 클래스가 다른 클래스를 포함하는 경우다. Aggregation(집합)과 Composition(합성)이다. 합성이 훨씬 더 강력한 관계라고 생각하면 된다.
흰색 다이아몬드가 Aggregation, 검은색 다이아몬드가 Composition이다. 두 개의 차이점은 질문을 통해 쉽게 알 수 있다.
TrainStation이 사라진다면 Train의 의미가 사라지는가? NO => Aggregation
Train이 사라진다면 Wheel의 의미가 사라지는가? YES => Composition (바퀴 없는 기차는 의미가 없다. 자기 부상열차이면 모를까)
이 클래스 다이어그램을 해석하면 Train은 0개 또는 1개의 TrainStation에 소속될 수 있고, 소속되는 Train의 개수는 무한대이다. 그리고 1개의 Train에 4개~10개의 바퀴가 소속된다. 그리고 Train이라는 추상클래스를 상속받은 KTX, ITX 클래스가 있다.
정리
'Knowledge > 디자인 패턴' 카테고리의 다른 글
[구조 패턴] 어댑터 | 퍼싸드 | 컴포지트 | 브리지 패턴 (with 예시 코드) (0) | 2024.07.25 |
---|---|
SOLID란? - 객체지향 개발의 원칙 (0) | 2024.04.08 |
UML이란? - UML을 사용하는 이유 (2) | 2024.04.03 |