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