시작하기
-
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