플로우차트
그래픽 표현
마인드맵
구조화된 표현
노트
효율적인 표현

클래스 다이어그램구문

클래스 다이어그램

클래스 다이어그램은 객체 지향 모델링의 주요 구성 요소입니다. 애플리케이션 구조의 일반적인 개념 모델링과 모델을 프로그래밍 코드로 변환하는 상세 모델링에 사용됩니다. 클래스 다이어그램은 데이터 모델링에도 사용할 수 있습니다. 클래스 다이어그램의 클래스는 애플리케이션의 주요 요소와 상호 작용을 나타내는 동시에 프로그래밍해야 하는 클래스도 나타냅니다.

코드
                            
복사
임베드
--- title: Animal example --- classDiagram note "From Duck till Zebra" Animal <|-- Duck note for Duck "can fly can swim can dive can help in debugging" Animal <|-- Fish Animal <|-- Zebra Animal : +int age Animal : +String gender Animal: +isMammal() Animal: +mate() class Duck{ +String beakColor +swim() +quack() } class Fish{ -int sizeInFeet -canEat() } class Zebra{ +bool is_wild +run() }

문법

클래스

UML은 클래스 멤버(예: 속성 및 메서드)와 그에 대한 추가 정보를 표현하는 메커니즘을 제공합니다. 클래스의 단일 인스턴스는 세 부분으로 구성됩니다:

  • 상단에는 클래스의 이름이 포함됩니다. 굵게 중앙 정렬되어 인쇄되며 첫 글자는 대문자입니다. 클래스의 성격을 설명하는 선택적 주석 텍스트를 포함할 수도 있습니다.
  • 중간에는 클래스의 속성이 포함됩니다. 왼쪽 정렬되며 첫 글자는 소문자입니다.
  • 하단에는 클래스가 수행할 수 있는 작업이 포함됩니다. 이것들도 왼쪽 정렬되며 첫 글자는 소문자입니다.
코드
                            
복사
임베드
--- title: Bank example --- classDiagram class BankAccount BankAccount : +String owner BankAccount : +Bigdecimal balance BankAccount : +deposit(amount) BankAccount : +withdrawal(amount)

클래스 정의

클래스를 정의하는 두 가지 방법

  • class 문법을 명시적으로 사용합니다(예: class Animal). 이는 Animal 클래스를 정의합니다.
  • 관계를 통해 두 클래스와 그들 사이의 관계를 동시에 정의합니다(예: Vehicle <|-- Car).
코드
                            
복사
임베드
classDiagram class Animal Vehicle <|-- Car

명명 규칙: 클래스 이름은 영숫자 문자(unicode 포함), 밑줄(_) 및 하이픈(-)으로만 구성될 수 있습니다.

클래스 레이블

클래스에 레이블을 제공해야 하는 경우 다음 문법을 사용할 수 있습니다:

코드
                            
복사
임베드
classDiagram class Animal["Animal with a label"] class Car["Car with *! symbols"] Animal --> Car

백틱(``)을 사용하여 레이블의 특수 문자를 이스케이프할 수도 있습니다:

코드
                            
복사
임베드
classDiagram class `Animal Class!` class `Car Class` `Animal Class!` --> `Car Class`

클래스 멤버 정의

UML은 클래스 멤버(예: 속성 및 메서드)와 그에 대한 추가 정보를 표현하는 메커니즘을 제공합니다.

Mermaid는 소괄호()의 존재 여부에 따라 속성과 함수 또는 메서드를 구분합니다. () 가 있는 것은 함수 또는 메서드로 간주되고 나머지는 모두 속성으로 간주됩니다.

클래스 멤버를 정의하는 두 가지 방법이 있으며, 어떤 문법을 사용하여 멤버를 정의하든 출력 결과는 동일합니다. 두 가지 방법은 다음과 같습니다:

1. 콜론(:) 뒤에 멤버 이름을 붙여 클래스의 멤버를 연결하며, 한 번에 하나의 멤버를 정의하는 데 유용합니다. 예:

코드
                            
복사
임베드
classDiagram class BankAccount BankAccount : +String owner BankAccount : +BigDecimal balance BankAccount : +deposit(amount) BankAccount : +withdrawal(amount)

2. 중괄호 {}로 클래스의 멤버를 연결하며, 멤버가 중괄호 안에 그룹화됩니다. 한 번에 여러 멤버를 정의하는 데 적합합니다. 예:

코드
                            
복사
임베드
classDiagram class BankAccount{ +String owner +BigDecimal balance +deposit(amount) +withdrawal(amount) }

반환 유형

메서드 또는 함수 정의의 끝에 반환할 데이터 유형을 지정할 수 있습니다. 주의: 마지막 ')' 와 반환 유형 사이에 공백이 있어야 합니다. 예:

코드
                            
복사
임베드
classDiagram class BankAccount{ +String owner +BigDecimal balance +deposit(amount) bool +withdrawal(amount) int }

제네릭 유형

제네릭 유형은 클래스 정의의 일부로 표현될 수 있으며, 클래스 멤버나 반환 유형에도 사용할 수 있습니다. 항목을 제네릭 유형으로 표현하려면 유형을 물결표(~)로 감쌉니다. List<List<int>> 와 같은 중첩 유형 선언은 지원되지만, List<List<K, V>> 처럼 쉼표를 포함하는 제네릭 유형은 현재 지원되지 않습니다.

코드
                            
복사
임베드
classDiagram class Square~Shape~{ int id List~int~ position setPoints(List~int~ points) getPoints() List~int~ } Square : -List~string~ messages Square : +setMessages(List~string~ messages) Square : +getMessages() List~string~ Square : +getDistanceMatrix() List~List~int~~

가시성

속성 또는 메서드/함수의 가시성을 설명하기 위해 해당 멤버 이름 앞에 선택적 기호를 사용하여 나타낼 수 있습니다:

  • + 공개
  • - 비공개
  • # 보호됨
  • ~ 내부

관계 정의

관계는 클래스 다이어그램과 객체 다이어그램에서 발견되는 특정 유형의 논리적 연결을 포괄하는 일반적인 용어입니다.

                            
복사
임베드
[classA][Arrow][ClassB]

UML为类定义了八种不同类型的关系:

유형 설명
<|-- 상속
*-- 합성
o-- 집약
--> 연관
-- 링크(실선)
..> 의존
..|> 구현
.. 링크(점선)
코드
                            
복사
임베드
classDiagram classA <|-- classB classC *-- classD classE o-- classF classG <-- classH classI -- classJ classK <.. classL classM <|.. classN classO .. classP

레이블을 사용하여 두 클래스 사이의 관계 성격을 설명할 수 있습니다. 또한 화살표를 반대 방향으로 사용할 수도 있습니다:

코드
                            
복사
임베드
classDiagram classA --|> classB : Inheritance classC --* classD : Composition classE --o classF : Aggregation classG --> classH : Association classI -- classJ : Link(Solid) classK ..> classL : Dependency classM ..|> classN : Realization classO .. classP : Link(Dashed)

관계 레이블

관계에 레이블 텍스트를 추가할 수 있습니다:

                            
복사
임베드
[classA][Arrow][ClassB]:LabelText
코드
                            
복사
임베드
classDiagram classA <|-- classB : implements classC *-- classD : composition classE o-- classF : aggregation

양방향 관계

양방향 관계는 논리적으로 N:M 연관을 나타낼 수 있습니다:

코드
                            
복사
임베드
classDiagram Animal <|--|> Zebra

语法如下:

                            
복사
임베드
[Relation Type][Link][Relation Type]

其中 Relation Type 是以下之一:

유형 설명
<| 상속
* 합성
o 집약
> 연관
< 연관
|> 구현

Link 는 다음 중 하나입니다:

유형 설명
-- 실선
.. 점선

롤리팝 인터페이스

클래스에는 클래스에 대한 롤리팝 인터페이스를 정의하는 특수 관계 유형을 할당할 수도 있습니다. 롤리팝 인터페이스는 다음 문법으로 정의됩니다:

  • bar ()-- foo
  • foo --() bar

롤리팝이 있는 인터페이스(bar)가 클래스(foo)에 연결됩니다.

참고: 정의된 각 인터페이스는 고유하며, 클래스 간에 공유하지 않고 여러 연결이 이를 가리키도록 허용하지 않는 것이 목적입니다.

코드
                            
복사
임베드
classDiagram bar ()-- foo
코드
                            
복사
임베드
classDiagram class Class01 { int amount draw() } Class01 --() bar Class02 --() bar foo ()-- Class01

네임스페이스 정의

네임스페이스는 클래스를 그룹화합니다.

코드
                            
복사
임베드
classDiagram namespace BaseShapes { class Triangle class Rectangle { double width double height } }

관계의 기수/다중성

클래스 다이어그램의 다중성 또는 기수는 한 클래스의 인스턴스가 다른 클래스의 인스턴스와 연결될 수 있는 수를 나타냅니다. 예를 들어 각 회사에는 한 명 이상의 직원이 있으며 0명일 수 없고, 각 직원은 현재 0개 또는 1개의 회사에 재직합니다.

다중성 기호는 연관의 끝 근처에 배치됩니다.

다양한 기수 옵션은 다음과 같습니다:

  • 1 오직 1개
  • 0..1 0개 또는 1개
  • 1..* 1개 이상
  • * 0개 또는 1개 이상
  • n n(n>1인 경우)
  • 0..n 0에서 n까지(n>1인 경우)
  • 1..n 1에서 n까지(n>1인 경우)

기수는 주어진 화살표 앞이나 뒤에 텍스트 옵션을 큰따옴표 ”“ 로 감싸 쉽게 정의할 수 있습니다. 예:

                            
복사
임베드
[classA] "cardinality1" [Arrow] "cardinality2" [ClassB]:LabelText
코드
                            
복사
임베드
classDiagram Customer "1" --> "*" Ticket Student "1" --> "1..*" Course Galaxy --> "many" Star : Contains

클래스 주석

마크업을 사용하여 클래스에 주석을 달아 클래스에 대한 추가 메타데이터를 제공할 수 있습니다. 이는 클래스의 성격을 더 명확하게 나타낼 수 있습니다. 일반적인 주석에는 다음이 포함됩니다:

  • <<Interface>> 인터페이스 클래스를 나타냅니다.
  • <<Abstract>> 추상 클래스를 나타냅니다.
  • <<Service>> 서비스 클래스를 나타냅니다.
  • <<Enumeration>> 열거형을 나타냅니다.

주석은 시작 부분의 << 와 끝부분의 >> 에서 정의됩니다. 클래스에 주석을 추가하는 세 가지 방법이 있으며, 세 방법의 출력은 동일합니다:

  • 클래스 정의와 인라인
                            
복사
임베드
classDiagram class Shape <<interface>>

클래스를 정의한 후의 별도 줄에서:

코드
                            
복사
임베드
classDiagram class Shape <<interface>> Shape Shape : noOfVertices Shape : draw()
  • 클래스 정의의 중첩 구조에서:
코드
                            
복사
임베드
classDiagram class Shape{ <<interface>> noOfVertices draw() } class Color{ <<enumeration>> RED BLUE GREEN WHITE BLACK }

주석

클래스 다이어그램에 주석을 입력할 수 있으며 편집기는 해당 주석을 무시합니다. 주석은 한 줄을 차지해야 하며 이중 퍼센트 기호(%%)로 시작해야 합니다. 다음 줄까지의 모든 텍스트는 모든 클래스 다이어그램 문법을 포함하여 주석으로 간주됩니다.

코드
                            
복사
임베드
classDiagram %% This whole line is a comment classDiagram class Shape <<interface>> class Shape{ <<interface>> noOfVertices draw() }

차트 방향 설정

방향 문을 사용하여 클래스 다이어그램 렌더링 방향을 설정할 수 있습니다:

코드
                            
복사
임베드
classDiagram direction RL class Student { -idCard : IdCard } class IdCard{ -id : int -name : string } class Bike{ -id : int -name : string } Student "1" --o "1" IdCard : carries Student "1" --o "1" Bike : rides

상호 작용

노드에 클릭 이벤트를 바인딩할 수 있습니다. 클릭 이벤트는 JavaScript 콜백 함수를 트리거하거나 새 브라우저 탭에서 로드될 링크를 열 수 있습니다. 참고: securityLevel='strict' 를 사용하면 이 기능이 비활성화되고, securityLevel='loose' 를 사용하면 활성화됩니다.

모든 클래스 선언 이후 별도의 줄에 이러한 작업을 정의할 수 있습니다.

                            
복사
임베드
action className "reference" "tooltip" click className call callback() "tooltip" click className href "url" "tooltip"
  • action 은 호출하려는 상호 작용 유형에 따라 link 또는 callback 입니다.
  • className 은 작업과 연결된 노드 id입니다.
  • reference 는 URL 링크일 수도 있고 콜백 함수의 이름일 수도 있습니다.
  • (선택 사항) 도구 설명은 마우스를 요소 위에 올렸을 때 표시되는 문자열입니다.
  • 콜백 함수는 nodeId 를 매개변수로 호출됩니다.

참고

note "line1 line2" 를 사용하여 차트에 주석을 추가할 수 있습니다. note for <CLASS NAME> "line1 line2" 를 사용하여 특정 클래스에 주석을 추가할 수 있습니다.

예시

코드
                            
복사
임베드
classDiagram note "This is a general note" note for MyClass "This is a note for a class" class MyClass{ }

웹사이트 링크:

코드
                            
복사
임베드
classDiagram class Shape link Shape "https://www.github.com" "This is a tooltip for a link" class Shape2 click Shape2 href "https://www.github.com" "This is a tooltip for a link"

구성

멤버 상자

클래스 노드의 빈 멤버 상자를 숨길 수 있으며, 이는 클래스 다이어그램 구성의 hideEmptyMembersBox 값을 변경하여 수행됩니다.

코드
                            
복사
임베드
--- config: class: hideEmptyMembersBox: true --- classDiagram class Duck