클래스 다이어그램
참고 자료
- 최범균님 - UML 기초 강의 on Youtube
 - 널널한 개발자님 - UML 이야기 첫 번째, 클래스 다이어그램 on Youtube
 - nextree - UML: 클래스 다이어그램과 소스코드 매핑
 - UML for Java Programmers by Robert C. Martin
 - mermaid syntax - classDiagram
 
클래스 다이어그램¶
- 객체의 타입을 표현
 - 타입 간의 정적인 관계 기술
 - 클래스 이름/속성 (attribute)/ 오퍼레이션 (operation) 으로 세칸으로 구분
 - 클래스 이름만 필수로 나머지는 필요한 것만 표시 가능
 
classDiagram
    class Member{
        +String name
        +hello()
    }
in mermaid.js
classDiagram
    class Member{
        +String name
        +hello()
    }
// or
classDiagram
class Member
Member : +String name
Member : +hello()
속성 표기법¶
가시성 이름 : 타입 = 기본갑- 가시성 
+ public,- private,# protected,~ package 
classDiagram
    class Customer{
        -name
        +String phone
        #type = CORPORATE
    }
오퍼레이션 표기법¶
- 가시성 이름 (매개변수 목록) : 리턴타입
 
classDiagram
class Order {
    +changeShippingAddress(newAddr: Address)
    +totalAmounts() Long
}
in mermiad
classDiagram
class Order {
    +changeShippingAddress(newAddr: Address)
    +totalAmounts() Long
}
관계 기호 요약¶
- 연관관계 - 협력을 위해 필요한 영구적인 탐색 구조
 - 의존관계 - 협력을 위해 일시적으로 필요한 의존성 (파라미터, 리턴타입, 지역변수)
 
연관 (association)¶
Association with Label¶
classDiagram
    direction LR
    Person -->Company : 일함
    class Person
    class Company
- mermaid syntax - 
[classA][Arrow][ClassB]:LabelText 
Association with Cardinality¶
classDiagram
    direction LR
    Person "1..*" --> "1" Company : 일함
    class Person
    class Company
[classA] "cardinality1" [Arrow] "cardinality2" [ClassB]:LabelText
연관 탐색¶
- 연관 (실선) 의 화살표는 연관의 탐색 가능 방향을 의미
 - 양쪽에 모두 지정하지 않으면 양방향 탐색 가능
 
의존 (Dependency)¶
- 변경에 의한 전파 가능성을 의미
 - 점선 (..>) 으로 표시
 
classDiagram
    direction LR
    Controller ..>Handler
    Controller ..>Template
    class Controller{
        + render()
    }
    class Handler
    class Template
in mermaid
classDiagram
    direction LR
    Controller ..>Handler
    Controller ..>Template
    class Controller{
        + render()
    }
    class Handler
    class Template
인터페이스, 추상 클래스¶
classDiagram
    List<|..AbstractList : 구현 
    AbstractList<|--ArrayList : 일반화, 상속
    class List{
        <<Interface>>
        +add()
    }
    class AbstractList{
        <<Abstract>>
        #addInternal()*
    }
    class ArrayList
in-mermaid
classDiagram
    List<|..AbstractList : 구현 
    AbstractList<|--ArrayList : 일반화, 상속
    class List{
        <<Interface>>
        +add()
    }
    class AbstractList{
        <<Abstract>>
        #addInternal()*
    }
    class ArrayList
Aggregation, Composition¶
- 마름모꼴로 표현
 - aggregration - 집합
- 부분/전체 관계를 내포하는 연관의 특별한 형태
 - 색이 칠해져 있지 않음
 
 - composition - 합성
- 집합의 특별한 형태 (사실 큰 차이 없을 지도?) 조금 더 긴밀한 관계를 의미
 - 색이 칠해져 있음
 
 
classDiagram
    Team o--> Player : aggregation
    class Team 
    class Player
    Order *--> OrderItem : composition
    class Order 
    class OrderItem
in mermaid
  classDiagram
    Team o--> Player : aggregation
    class Team 
    class Player
    Order *--> OrderItem : composition
    class Order 
    class OrderItem
  
    
      Last update:
      February 26, 2023
      
        
Created: February 9, 2023
                
              Created: February 9, 2023
