UML 팁 모음
헷갈리는 UML 표기법 정리
Sequence Diagram¶
시퀀스 다이어그램의 경우 화살표 및 연결선의 모양에 따라 의미가 달라진다.
- 화살표: 동기/비동기 여부
- 일반 화살표: 동기 처리
- 열린 화살표: 비동기 처리
- 연결선: 호출/응답 관계
- 점선: 호출
- 실선: 응답
---
config:
theme: 'neutral'
---
sequenceDiagram
autonumber
Client ->> Server : synchronous request
Server -->> Client : synchronous response
Client -) Server : asynchronous request
Server --) Client : asynchronous response
ER Diagram¶
ERD의 경우 연결선의 형태로 식별자관계와 비식별자관계를 구분할 수 있다.
- 실선: 식별자관계
- 점선: 비식별자관계
---
config:
theme: 'neutral'
---
erDiagram
CAR ||..o{ NAMED-DRIVER : non-identifying
PERSON ||--o| NAMED-DRIVER : identifying
Class Diagram¶
클래스 다이어그램의 경우 연결선 및 연결점의 형태에 따라 상속(Inheritance), 조합(Composition), 의존(Dependency), 구현(Realization/Implementation) 등의 관계를 구분할 수 있다.
---
config:
theme: 'neutral'
---
classDiagram
classA <|-- classB : inheritance
classC *-- classD : composition
classE o-- classF : aggregation
classG <-- classH : association
classI -- classJ : link(Solid)
classK <.. classL : dependency
classM <|.. classN : realization
classO .. classP : link(Dashed)
Java로 작성한 실제 예시
---
config:
theme: 'neutral'
---
classDiagram
House *-- Room : composition
class House
class Room
class Engine
Car --> Engine : association
class Car
Garage o-- Car : aggregation
class Garage
Driver ..> Car : dependency
Vehicle <|.. Car : realization
class Driver
class Vehicle
class Animal
Animal <|-- Dog : inheritance
class Dog
각 기호별 실제 코드 예시는 아래와 같다.(헤드 위치 주의)
public class Dog extends Animal { // Inheritance: Dog extends Animal
@Override
public void makeSound() {
System.out.println("Woof!");
}
}
public class House {
private List<Room> rooms = new ArrayList<>(); // Composition: rooms die with house
public House() {
rooms.add(new Room("Living Room"));
rooms.add(new Room("Bedroom"));
}
public void showRooms() {
rooms.forEach(it -> System.out.println("Room: " + it.getName()));
}
}
@AllArgsConstructor
public class Car implements Vehicle { // Realization: Car implements Vehicle
private Engine engine; // Association: Car has Engine
public void drive() {
engine.start();
System.out.println("Car is driving...");
}
}
의존관계 비교
- Association: 단순 참조 관계
- Aggregation: 객체가 삭제되더라도 구성 객체는 삭제되지 않음
- Composition: 객체가 삭제될 때 구성 객체들도 같이 삭제 됨
- Dependency: 객체가 다른 객체를 임시로 이용함
다만 Association/Aggregation은 의미적인 차이이지 명확한 구분이 있는 것이 아니기 때문에 아래와 같이 Association 이면서 Aggregation인 관계도 있을 수 있다.
---
config:
theme: 'neutral'
---
classDiagram
direction LR
Whole *--> Part : aggregation/association
class Whole
class Part
접근제한자의 경우 아래와 같은 규칙에 따라 표기한다.
+
:public
-
:private
#
:protected
~
:default