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