시작하기
-
but, "Note: draw.io for Confluence Server and data center do not support PlantUML."
-
Jira
github action: https://github.com/grassedge/generate-plantuml-action
설정
-
파일 저장시 짤릴 경우
-DPLANTUML_LIMIT_SIZE=8192
Class diagram
-
일반화generalization:
--|> -
실체화Realization:
..|> -
의존dependency:
..> -
연관association:
-- -
직접 연관directed association:
-→ -
집합aggregation, 집합 연관:
o--,o-→ -
합성composition, 복합 연관:
*--,*-→
Generalization
-
일반화, 상속 구조
-
"is a kine of" 관계
-
overriding되면 서브 클래스에 해당 함수/필드를 정의
@startuml
hide empty field
hide empty method
class User {
+isHead(): Boolean
}
class HeadUser {
+isHead(): Boolean
}
class AdminUser
User <|-- HeadUser
User <|-- AdminUser
@enduml
|
|
Realization
-
interface에 있는 명세를 오버라이딩하여 구현하는 것
-
"can do this" 관계
-
두 가지 표현법이 존재함
@startuml
hide empty field
hide empty method
class User
interface Changeable {
+changeNickName(nickName: String): Unit
}
class HeadUser {
+changeNickName(nickName: String): Unit
}
User <|-- HeadUser
Changeable <|.. HeadUser
@enduml
@startuml
hide empty field
hide empty method
class User
circle Changeable
class HeadUser {
+changeNickName(nickName: String): Unit
}
User <|-- HeadUser
Changeable -- HeadUser
@enduml
Dependency
-
클래스간 참조가 일어나는 것 중 하나
-
메서드 내에서 대상 클래스의 객체를 생성하거나 사용, 리턴 받아 사용하는 것을 말함
-
이 참조는 해당 클래스와의 관계를 계속 유지하지 않음
@startuml
hide empty field
hide empty method
class User
interface Changeable {
+changeNickName(nickName: String): Unit
}
class HeadUser {
+changeNickName(nickName: String): Unit
+<b>createSchedule(): Schedule
+<b>useSchedule(schedule: Schedule): Unit
}
class Schedule
User <|-- HeadUser
Changeable <|.. HeadUser
HeadUser .[dashed,thickness=2].> Schedule
@enduml
|
|
Association
-
일반적인 연관은 실선으로 연결
-
Directed Association은 실선 후 끝에 화살표 추가
-
Composition은 전체와 부분이 강력한 연관 관계를 맺으며, 전체와 부분이 같은 생명 주기를 갖음
-
독립적인 객체가 서로 상호작용하기 위해 맴버로 참조해야할 경우
-
ex) Car와 Engine의 관계
Aggregation
-
집합
-
Shared Aggregation
-
Aggregation은 전체와 부분의 연관 관계를 맺지만, 그러나 동일한 생명 주기를 갖지는 않음
-
다른 어떤 것으로부터 빌린 객체가 존재. 전체가 죽어도 빌린 객체(부분)은 살 수 있음
-
ex) Person, Address 관계
-
-
전체가 부분을 포함(has-a)하는 경우. 약한 관계
@startuml hide empty field hide empty method class Person class Address Person o-- Address @enduml |
|
Composition
-
Composite Aggregation 이라고도 함
-
강한 집합을 의미
-
전체와 부분이 같은 생명주기를 갖음
-
객체를 소유하고 그 생명주기에 대한 책임을 갖는 경우. 전체가 죽으면 부분도 죽음
-
ex) Car-Engine, House-Room
@startuml hide empty field hide empty method class Person class Brain class Heart class Legs Person *-- Brain Person *-- Heart Person *-- Legs @enduml |
|
Example
글꼴 지정
@startuml skinparam defaultFontName "NanumGothic" @enduml
footer 설정
@startuml center footer © NAVER FINANCIAL Corp. All Rights Reserved. @enduml
외부 puml 파일 참조하기
@startuml "name" A -> B B --> A @enduml
다이어그램 가운데 정렬하기
@startuml A -> B @enduml
group 배경 투명하게 하기
@startuml box "actor1" #lightblue participant A participant B end box participant C A -> B group group1 B -> C C --> B end group @enduml
@startuml box "actor1" #lightblue participant A participant B end box participant C A -> B group #transparent group1 B -> C C --> B end group @enduml
|
Note
|
2022-02-10, 새로운 스타일 적용되면서 기본 투명으로 적용된 것 같음. ref |
이모지 추가
@startuml A -> B: <:lock:> 잠금 @enduml
메모 넣기
@startuml
skinparam rectangle<<desc>> {
backgroundColor Transparent
borderColor Transparent
titleFontColor Red
stereotypeFontColor Transparent
}
folder folder2 {
folder folder3 [
text bla bla
]
artifact art2 [
more text
]
rectangle f2<<desc>> [
Here you can have some explanation with
====
--Markdown-- //formatting// ~~elements~~
]
folder3 -[hidden]- f2
}
@enduml
@startuml
folder folder2 {
folder folder3 [
text bla bla
]
artifact art2 [
more text
]
label "간략한 내용을 남겨높는다" as simple_label
folder3 -[hidden]down- simple_label
}
@enduml
Trick
PlantUML tricks
alt 에서 activate 이어지는 듯한 느낌 만들기
@startuml A -> B: choice activate B alt case1 ... B -> B: proc B --> A: res deactivate B else B -[hidden]-> B activate B ... B -> B: proc B -> C: api activate C c --> B: res deactivate C B --> A: res deactivate B end @enduml
