Skip to content

Files

Failed to load latest commit information.

Latest commit

 Cannot retrieve latest commit at this time.

History

History

plantuml

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 

PlantUML

시작하기

설정

Class diagram

https://plantuml.com/ko/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
class User {
  fun isHead(): Boolean = false
}
class HeadUser: User() {
  override fun isHead(): Boolean = true
}
class AdminUser: User()

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
circle 형태로 정의
@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
class HeadUser: User, Changeable {
  override fun changeNickName(nickName: String): Unit { ... }

  fun createSchedule(): Schedule {
    return Schedule() // 객체 생성 및 반환
  }

  fun useSchedule(schedule: Schedule): Unit {
    // 객체를 매개변수로 받아서 사용
  }
}

Association

  • 일반적인 연관은 실선으로 연결

  • Directed Association은 실선 후 끝에 화살표 추가

  • Composition은 전체와 부분이 강력한 연관 관계를 맺으며, 전체와 부분이 같은 생명 주기를 갖음

  • 독립적인 객체가 서로 상호작용하기 위해 맴버로 참조해야할 경우

  • ex) Car와 Engine의 관계

Association vs. Composition vs. Aggregation

jNyV5

Aggregation

  • 집합

  • Shared Aggregation

  • Aggregation은 전체와 부분의 연관 관계를 맺지만, 그러나 동일한 생명 주기를 갖지는 않음

  • 다른 어떤 것으로부터 빌린 객체가 존재. 전체가 죽어도 빌린 객체(부분)은 살 수 있음

    • ex) Person, Address 관계

  • 전체가 부분을 포함(has-a)하는 경우. 약한 관계

@startuml
hide empty field
hide empty method

class Person
class Address

Person o-- Address
@enduml
class Person {
  private val address: Address

  constructor(address: Address) {
    this.address = address
  }
}

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
class Person {
  private val brain: Brain = Brain()
  private val heart: Heart = Heart()
  private val legs: Legs = Legs()
}

Example

글꼴 지정

@startuml
skinparam defaultFontName "NanumGothic"

@enduml
@startuml
center footer © NAVER FINANCIAL Corp. All Rights Reserved.

@enduml

외부 puml 파일 참조하기

link:example-diagram.puml[role=include]

다이어그램 가운데 정렬하기

@startuml
A -> B
@enduml

group 배경 투명하게 하기

AS-IS
@startuml
box "actor1" #lightblue
  participant A
  participant B
end box
participant C

A -> B
group group1
  B -> C
  C --> B
end group
@enduml
TO-BE
@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
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