홈페이지에 있는 내용입니다.

A -> B
note right : 기본으로 시퀀스가 그려집니다.

AABB기본으로 시퀀스가 그려집니다.

:A: -> (B) 
note left of A : :: 을 사용하여 액터로 표시.
note right of B : () 을 사용하여 유즈케이스로 표시.

AB:: 을 사용하여 액터로 표시.() 을 사용하여 유즈케이스로 표시.

A -> B
B : B클래스
note right of B : : 를 사용하여 클래스로 표시

ABB클래스: 를 사용하여 클래스로 표시

note right : :; 를 사용하여 액티비티로 표시

A:; 를 사용하여 액티비티로 표시B

()A -> [B]
note left of A : () 을 사용하여 인터페이스로 표시.
note right of B : [] 을 사용하여 컴포넌트로 표시.

AB() 을 사용하여 인터페이스로 표시.[] 을 사용하여 컴포넌트로 표시.

[*] -> A 
A : A State
note right of A : [*] 을 사용하여 스테이트로 표시.

AA State[*] 을 사용하여 스테이트로 표시.

Basic examples

  • 화살표 ->
  • 점선 -->
Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response

Alice -> Bob: Another authentication Request
Alice <-- Bob: another authentication Response

AliceAliceBobBobAuthentication RequestAuthentication ResponseAnother authentication Requestanother authentication Response


  • 한줄 주석 : ' 로 시작
  • 문단 주석 : /' ……….. '/

Declaring participant

actor Foo1
boundary Foo2
control Foo3
entity Foo4
database Foo5
Foo1 -> Foo2 : To boundary
Foo1 -> Foo3 : To control
Foo1 -> Foo4 : To entity
Foo1 -> Foo5 : To database

Foo1Foo1Foo2Foo2Foo3Foo3Foo4Foo4Foo5Foo5To boundaryTo controlTo entityTo database

색 지정

actor Bob #red
' The only difference between actor
'and participant is the drawing
participant Alice
participant "I have a really\nlong name" as L #99FF99
/' You can also declare:
   participant L as "I have a really\nlong name"  #99FF99

Alice->Bob: Authentication Request
Bob->Alice: Authentication Response
Bob->L: Log transaction

BobBobAliceAliceI have a reallylong nameI have a reallylong nameAuthentication RequestAuthentication ResponseLog transaction

Participant creation

Bob -> Alice : hello

create Other
Alice -> Other : new

create control String
Alice -> String
note right : You can also put notes!

Alice --> Bob : ok

BobBobAliceAliceOtherStringhellonewOtherStringYou can also put notes!ok


  • 괄호를 사용해서 표현 ( )
  • usecase 키워드 사용
(First usecase)
(Another usecase) as (UC2)  
usecase UC3
usecase (Last\nusecase) as UC4

First usecaseAnother usecaseUC3Lastusecase


  • 콜론을 사용해서 표현 : :
  • actor 키워드 사용
:First Actor:
:Another\nactor: as Men2  
actor Men3
actor :Last actor: as Men4

First ActorAnotheractorMen3Last actor


  • <|– 심볼 사용
:Main Admin: as Admin
(Use the application) as (Use)

User <|-- Admin
(Start) <|-- (Use)

Main AdminUse the applicationUserStart


  • note left of
    • note right of
    • note top of
    • note bottom
    • .. : 점선연결
:Main Admin: as Admin
(Use the application) as (Use)

User -> (Start)
User --> (Use)

Admin ---> (Use)

note right of Admin : This is an example.

note right of (Use)
  A note can also
  be on several lines
end note

note "This note is connected\nto several objects." as N2
(Start) .. N2
N2 .. (Use)

Main AdminUse the applicationUserStartThis is an example.A note can alsobe on several linesThis note is connectedto several objects.

화살표 방향 변경

  • -- : 수직 연결
  • - : 수평 연결
  • .. : 점선 연결
  • left, right, up or down
:user: -left-> (dummyLeft) 
:user: -right-> (dummyRight) 
:user: -up-> (dummyUp)
:user: -down-> (dummyDown)



  • 기본 : top to bottom
  • 변경 : top to bottom
left to right direction
user1 --> (Usecase 1)
user2 --> (Usecase 2)

user1Usecase 1user2Usecase 2

Complete example

left to right direction
skinparam packageStyle rect
actor customer
actor clerk
rectangle checkout {
  customer -- (checkout)
  (checkout) .> (payment) : include
  (help) .> (checkout) : extends
  (checkout) -- clerk


Relations between classes

Extension <|--
Composition *--
Agregation o--
scale 900 width
Class01 <|-- Class02
Class03 *-- Class04
Class05 o-- Class06
Class07 .. Class08
Class09 -- Class10
Class11 <|.. Class12
Class13 --> Class14
Class15 ..> Class16
Class17 ..|> Class18
Class19 <--* Class20


Label on relations

  • cardinality : “”
  • label : :
Class01 "1" *-- "many" Class02 : contains

Class03 o-- Class04 : agregation

Class05 --> "1" Class06


Defining visibility

Character Visibility
~package private
class Dummy {


Abstract and Static

  • {abstract}
  • {static} or {classifier}
class Dummy {
  {static} String id
  {abstract} void methods()

DummyString idvoid methods()

Advanced class body

  • --
  • ..
  • ==
  • __
class Foo1 {
  You can use
  several lines
  as you want
  and group
  things together.
  You can have as many groups
  as you want
  End of class

class User {
  .. Simple Getter ..
  + getName()
  + getAddress()
  .. Some setter ..
  + setName()
  __ private data __
  int age
  -- crypted --
  String password

Foo1You can useseveral linesas you wantand groupthings together.You can have as many groupsas you wantEnd of classUsergetName()getAddress()Simple GettersetName()Some setterint ageprivate dataString passwordcrypted


package "Classic Collections" #DDDDDD {
  Object <|-- ArrayList

package net.sourceforge.plantuml {
  Object <|-- Demo1
  Demo1 *- Demo2

Classic Collectionsnet.sourceforge.plantumlObjectArrayListDemo1Demo2

Splitting large files

  • page (hpages)x(vpages)
' Split into 4 pages
page 2x2

class BaseClass

namespace net.dummy #DDDDDD {
    .BaseClass <|-- Person
    Meeting o-- Person
    .BaseClass <|- Meeting


namespace {
  net.dummy.Person  <|- Person
  .BaseClass <|-- Person

  net.dummy.Meeting o-- Person

BaseClass <|-- net.unused.Person


title Servlet Container

(*) --> "ClickServlet.handleRequest()"
--> "new Page"

if "Page.onSecurityCheck" then
  ->[true] "Page.onInit()"
  if "isForward?" then
   ->[no] "Process controls"
   if "continue processing?" then
     -->[yes] ===RENDERING===
     -->[no] ===REDIRECT_CHECK===
   -->[yes] ===RENDERING===
  if "is Post?" then
    -->[yes] "Page.onPost()"
    --> "Page.onRender()" as render
    --> ===REDIRECT_CHECK===
    -->[no] "Page.onGet()"
    --> render
  -->[false] ===REDIRECT_CHECK===

if "Do redirect?" then
 ->[yes] "redirect request"
 if "Do Forward?" then
  -left->[yes] "Forward request"
  -right->[no] "Render page template"

--> "Page.onDestroy()"

Servlet ContainerClickServlet.handleRequest()new PagePage.onInit()Process controlsPage.onPost()Page.onRender()Page.onGet()redirect requestForward requestRender page templatePage.onDestroy()Page.onSecurityChecktrueisForward?nocontinue processing?yesnoyesis Post?yesnofalseDo redirect?yesDo Forward?yesno

Activity Beta

:new page;
if (Page.onSecurityCheck) then (true)
  if (isForward?) then (no)
    :Process controls;
    if (continue processing?) then (no)
    if (isPost?) then (yes)
    else (no)
else (false)

if (do redirect?) then (yes)
  :redirect process;
  if (do forward?) then (yes)
    :Forward request;
  else (no)
    :Render page template;


ClickServlet.handleRequest()new pagePage.onInit()Process controlscontinue processing?noisPost?yesnoPage.onPost()Page.onGet()Page.onRender()noisForward?truePage.onSecurityCheckfalsedo redirect?yesredirect processdo forward?yesnoForward requestRender page template

ThFrSaSuMoTuWeThFrSaSuMoTuWeThFrSaSuMoTuWeThFrSaSuMoTuWeThFrSaSuMoTuWe2021222324252627282930123456789101112131415161718192021222324September 2018October 2018Prototype designTest prototypeWrite testsHire tests writersInit and write tests report2021222324252627282930123456789101112131415161718192021222324ThFrSaSuMoTuWeThFrSaSuMoTuWeThFrSaSuMoTuWeThFrSaSuMoTuWeThFrSaSuMoTuWeSeptember 2018October 2018

actor actor
agent agent
artifact artifact
boundary boundary
card card
cloud cloud
component component
control control
database database
entity entity
file file
folder folder
frame frame
interface  interface
node node
package package
queue queue
stack stack
rectangle rectangle
storage storage
usecase usecase