UML(Unified Modeling Language)

UML(Unified Modeling Language)은 시스템, 소프트웨어, 비즈니스 프로세스를 시각적으로 모델링하기 위한 표준화된 범용 모델링 언어이다. 1990년대 중반에 Grady Booch, James Rumbaugh, Ivar Jacobson(종종 “삼총사"라고 불림)에 의해 개발되었으며, 현재는 OMG(Object Management Group)에서 관리하고 있다.

UML은 객체지향 프로그래밍의 개념이 확산되면서 소프트웨어 설계와 구조를 표현하는 공통 언어의 필요성에 의해 탄생했다. 프로그래밍 언어나 개발 방법론과 무관하게 사용할 수 있으며, 시스템의 다양한 측면을 표현할 수 있는 여러 다이어그램 유형을 제공한다.

UML은 현재 버전 2.5.1(2017년 12월 발표)까지 발전해왔으며, 소프트웨어 개발 과정에서 다음과 같은 역할을 한다:

UML 개요

UML의 특징

UML 다이어그램 유형

UML 2.5.1은 크게 두 가지 유형의 다이어그램으로 분류된다:

구조 다이어그램(Structure Diagrams)

시스템의 정적 구조와 객체, 클래스, 모듈 간의 관계를 표현한다.

클래스 다이어그램(Class Diagram)

시스템 내 클래스, 속성, 메소드, 클래스 간의 관계를 보여준다.
객체지향 설계의 기본이 되는 다이어그램이다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
+---------------------+
|      Customer       |
+---------------------+
| -id: String         |
| -name: String       |
| -email: String      |
+---------------------+
| +getId(): String    |
| +setName(name)      |
| +getEmail(): String |
+---------------------+
         |
         | 상속
         |
+---------------------+
|   PremiumCustomer   |
+---------------------+
| -level: int         |
| -discount: double   |
+---------------------+
| +getDiscount()      |
| +upgradeLevel()     |
+---------------------+

클래스 다이어그램의 주요 요소:

객체 다이어그램(Object Diagram)

특정 시점의 객체 인스턴스와 그 관계를 보여준다.
클래스 다이어그램의 인스턴스라고 볼 수 있다.

1
2
3
4
:Customer
id = "C1001"
name = "홍길동"
email = "hong@example.com"
컴포넌트 다이어그램(Component Diagram)

시스템의 물리적 컴포넌트와 그 의존성을 보여준다.
소프트웨어의 모듈화 및 구성을 표현한다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
    +-------------------+
    |   Web Interface   |
    +-------------------+
             |
             v
+-------------------+    +-------------------+
|  Business Logic   |--->|   Data Access     |
+-------------------+    +-------------------+
                              |
                              v
                        +-------------------+
                        |    Database       |
                        +-------------------+
배치 다이어그램(Deployment Diagram)

물리적 아키텍처와 소프트웨어 컴포넌트의 배포를 보여준다.
하드웨어 노드와 그 관계를 표현한다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
+------------------+         +-------------------+
|  Client Machine  |<--------|    Web Server     |
+------------------+         +-------------------+
                                      |
                                      v
                             +-------------------+
                             | Application Server|
                             +-------------------+
                                      |
                                      v
                             +-------------------+
                             |  Database Server  |
                             +-------------------+
패키지 다이어그램(Package Diagram)

시스템의 패키지 구조와 의존성을 보여준다.
모듈화된 시스템의 계층 구조를 표현하는 데 유용하다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
+--------------------+
|     UI Layer       |
+--------------------+
          |
          v
+--------------------+      +--------------------+
|   Service Layer    |----->|   Utility Module   |
+--------------------+      +--------------------+
          |
          v
+--------------------+
|  Repository Layer  |
+--------------------+
복합 구조 다이어그램(Composite Structure Diagram)

클래스 내부 구조와 협력 관계를 표현한다.
복잡한 시스템의, 내부 구조를 세부적으로 모델링할 때 사용된다.

프로필 다이어그램(Profile Diagram)

UML을 특정 도메인이나 플랫폼에 맞게 확장하는 방법을 정의한다.

행위 다이어그램(Behavior Diagrams)

시스템의 동적 행위, 상호작용, 시간에 따른 변화를 표현한다.

유스케이스 다이어그램(Use Case Diagram)

시스템과 사용자(액터) 간의 상호작용과 기능을 보여준다.
요구사항 분석 단계에서 주로 사용된다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
               +------------------------------+
               |         Online Shop          |
               |                              |
               |  +----------------------+    |
               |  |     Browse Items     |    |
               |  +----------------------+    |
               |                              |
 +--------+    |  +----------------------+    |
 |        |------>|     Place Order      |    |
 | Customer|    |  +----------------------+    |
 |        |    |                              |
 +--------+    |  +----------------------+    |
               |  |    Track Delivery    |<---+----+ +--------+
               |  +----------------------+    |      | Delivery|
               |                              |      | Service |
               +------------------------------+      +--------+

유스케이스 다이어그램의 주요 요소:

시퀀스 다이어그램(Sequence Diagram)

객체 간의 상호작용을 시간 순서대로 보여준다.
메시지 교환과 시스템 동작의 흐름을 표현한다.

1
2
3
4
5
6
7
8
9
   User          LoginController     UserService       Database
    |                  |                 |                |
    |---Login Request->|                 |                |
    |                  |--Validate User->|                |
    |                  |                 |--Query User--->|
    |                  |                 |<--User Data----|
    |                  |<---User Status--|                |
    |<--Login Result---|                 |                |
    |                  |                 |                |

시퀀스 다이어그램의 주요 요소:

활동 다이어그램(Activity Diagram)

비즈니스 프로세스나 워크플로우를 단계별로 표현한다.
알고리즘이나 비즈니스 로직을 모델링하는 데 사용된다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
    (시작)
       |
       v
  +----------+
  | 주문 접수 |
  +----------+
       |
       v
  +-----------------+
  | 재고 확인       |
  +-----------------+
       |
       v
  < 재고 있음? >
    /        \
   예         아니오
   |           |
   v           v
+--------+ +------------+
| 포장   | | 재고 주문  |
+--------+ +------------+
   |           |
   v           v
+--------+ +-------------+
| 배송   | | 고객에게 알림|
+--------+ +-------------+
   |           |
   v           v
  (종료)      (종료)

활동 다이어그램의 주요 요소:

상태 다이어그램(State Diagram)

객체의 상태 변화와 상태 전이를 표현한다.
객체의 생명주기를 모델링하는 데 적합하다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
      +------------+  주문 접수   +-------------+  결제 확인  +------------+
      |            |------------>|             |------------>|            |
----->|   생성됨   |             |  처리 중    |             |  완료됨    |
      |            |             |             |             |            |
      +------------+             +-------------+             +------------+
            |                          |
            |                          |
            | 취소 요청                | 결제 실패
            v                          v
      +------------+             +-------------+
      |   취소됨   |             |   실패      |
      |            |             |             |
      +------------+             +-------------+

상태 다이어그램의 주요 요소:

통신 다이어그램(Communication Diagram)

객체 간의 상호작용을 구조적 배치와 함께 보여준다.
시퀀스 다이어그램과 비슷하지만 시간 순서보다 구조적 관계에 초점을 맞춘다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
                  +-------------+
                  |    User     |
                  +-------------+
                        |
                        | 1: login(username, password)
                        v
               +------------------+
               | LoginController  |
               +------------------+
                        |
  2: validate(username, password) |
                        v
               +------------------+
               |  UserService     |
               +------------------+
                        |
               3: findUser(username) |
                        v
               +------------------+
               |    Database      |
               +------------------+
상호작용 개요 다이어그램(Interaction Overview Diagram)

여러 상호작용 다이어그램을 결합하여 복잡한 시나리오를 표현한다.
활동 다이어그램과 시퀀스 다이어그램의 혼합 형태이다.

타이밍 다이어그램(Timing Diagram)

시간에 따른 객체의 상태 변화와 상호작용을 표현한다.
실시간 시스템이나 시간 제약이 있는 시스템 모델링에 유용하다.

UML 관계 유형

UML에서 다양한 요소 간의 관계를 표현하는 방법은 다음과 같다:

연관(Association)

두 클래스 간의 일반적인 관계를 나타낸다. 보통 한 클래스가 다른 클래스의 인스턴스를 참조하거나 사용할 때 사용된다.

1
Customer ------- Order
단방향 연관(Unidirectional Association)

한 클래스만 다른 클래스를 인식하는 관계이다.

1
Customer -------> Order
양방향 연관(Bidirectional Association)

두 클래스가 서로를 인식하는 관계이다.

1
Customer <-------> Order
다중성(Multiplicity)

연관 관계에서 객체 인스턴스의 수량을 표현한다.

1
2
Customer "1" --------- "*" Order
(한 고객은 여러 주문을 가질 수 있음)

주요 다중성 표기:

집합(Aggregation)

“has-a” 관계를 나타내며, 한 클래스가 다른 클래스의 컬렉션을 포함하지만 생명주기는 독립적인 관계이다.

1
2
Department <>------ Employee
(부서는 직원들을 포함하지만, 부서가 없어져도 직원은 존재)

합성(Composition)

더 강한 “contains-a” 관계로, 부분이 전체에 강하게 종속되어 있고 생명주기를 공유한다.

1
2
Order <♦>------ OrderItem
(주문이 삭제되면 주문 항목도 삭제됨)

일반화/상속(Generalization/Inheritance)

“is-a” 관계를 나타내며, 한 클래스가 다른 클래스의 특수화된 형태임을 표현한다.

1
2
Vehicle <|------- Car
(자동차는 차량의 한 종류)

실현(Realization)

인터페이스와 이를 구현하는 클래스 간의 관계를 표현한다.

1
2
3
<<interface>>
Payable <|……… CreditCardPayment
(신용카드 결제는 결제 인터페이스를 구현)

의존(Dependency)

한 클래스가 다른 클래스에 의존하는 관계를 표현한다.
보통 메소드 매개변수, 지역 변수 등으로 일시적으로 사용하는 경우이다.

1
2
OrderService -----> EmailService
(주문 서비스는 이메일 서비스를 사용)

UML 다이어그램 작성 방법 및 도구

UML 다이어그램 작성 과정

  1. 목적 정의: 다이어그램이 표현하고자 하는 내용과 대상자 결정
  2. 다이어그램 유형 선택: 시스템의 어떤 측면을 표현할지에 따라 적절한 다이어그램 유형 선택
  3. 요소 식별: 클래스, 객체, 액터, 유스케이스 등 필요한 요소 식별
  4. 관계 식별: 요소 간의 관계 파악
  5. 다이어그램 작성: 적절한 UML 표기법을 사용하여 다이어그램 작성
  6. 검토 및 수정: 완성된 다이어그램을 검토하고 필요시 수정

UML 도구

UML 다이어그램을 작성하는 데 사용할 수 있는 다양한 도구가 있다:

  1. 전문 UML 도구
    • Enterprise Architect: 복잡한 시스템 모델링에 적합한 전문 도구
    • Visual Paradigm: 직관적인 인터페이스와 다양한 UML 다이어그램 지원
    • Rational Rose/IBM Rational Software Architect: IBM의 전문 모델링 도구
    • StarUML: 경량화된 UML 모델링 도구
    • MagicDraw: 고급 UML 모델링 기능을 제공하는 전문 도구
  2. 통합 개발 환경(IDE) 플러그인
    • Eclipse Papyrus: Eclipse IDE용 UML 모델링 플러그인
    • Visual Studio Class Designer: Microsoft Visual Studio의 클래스 다이어그램 도구
    • IntelliJ IDEA UML 지원: JetBrains의 IntelliJ IDEA에서 제공하는 UML 기능
  3. 온라인/클라우드 도구
    • Lucidchart: 웹 기반 다이어그램 작성 도구
    • draw.io (diagrams.net): 무료 온라인 다이어그램 도구
    • Gliffy: Atlassian 제품과 통합 가능한 다이어그램 도구
    • Creately: 협업 기능이 강화된 온라인 다이어그램 도구

UML 모델링 사례 연구

온라인 쇼핑몰 시스템 모델링

유스케이스 다이어그램

온라인 쇼핑몰의 주요 기능과 사용자 상호작용을 모델링한다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
                +------------------------------+
                |        온라인 쇼핑몰          |
                |                              |
                |  +----------------------+    |
                |  |     상품 검색        |    |
                |  +----------------------+    |
                |           ^                  |
                |           |                  |
  +--------+    |  +----------------------+    |    +--------+
  |        |----->|     상품 조회         |    |    |        |
  |  고객  |    |  +----------------------+    |<---|  관리자 |
  |        |    |           |                  |    |        |
  +--------+    |           v                  |    +--------+
       |        |  +----------------------+    |        |
       |        |  |     장바구니 관리     |    |        |
       |        |  +----------------------+    |        |
       |        |           |                  |        |
       |        |           | «include»        |        |
       |        |           v                  |        |
       +-------->  +----------------------+    |        |
                |  |      주문 처리        |    |        |
                |  +----------------------+    |        |
                |           |                  |        |
                |           | «include»        |        |
                |           v                  |        |
                |  +----------------------+    |        |
                |  |      결제 처리        |<---+--------+
                |  +----------------------+    |
                |                              |
                +------------------------------+
클래스 다이어그램

온라인 쇼핑몰의 주요 클래스와 그 관계를 모델링한다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
+---------------+      +----------------+       +---------------+
|    Customer   |      |     Order      |       |    Product    |
+---------------+      +----------------+       +---------------+
| -id: String   |      | -id: String    |       | -id: String   |
| -name: String |      | -date: Date    |       | -name: String |
| -email: String|      | -status: String|       | -price: double|
| -address: Addr|      | -totalAmt: dbl |       | -stock: int   |
+---------------+      +----------------+       +---------------+
| +register()   |      | +placeOrder()  |       | +addStock()   |
| +login()      |      | +cancel()      |       | +updatePrice()|
| +updateInfo() |      | +confirm()     |       | +getDetails() |
+---------------+      +----------------+       +---------------+
       | 1                 | 1                        | *
       |                   |                          |
       v *                 v *                        |
+---------------+      +----------------+             |
|  ShoppingCart |      |   OrderItem    |<------------+
+---------------+      +----------------+
| -id: String   |      | -quantity: int |
| -createdAt    |      | -price: double |
+---------------+      +----------------+
| +addItem()    |      | +getSubtotal() |
| +removeItem() |      +----------------+
| +checkout()   |
+---------------+
       | 1
       |
       v *
+---------------+
|   CartItem    |
+---------------+
| -quantity: int|
+---------------+
| +updateQty()  |
+---------------+
시퀀스 다이어그램

주문 처리 과정의 객체 간 상호작용을 시간 순서대로 모델링한다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
   고객          장바구니        주문 서비스      결제 서비스      재고 관리
    |               |               |               |               |
    |--장바구니 체크아웃->|               |               |               |
    |               |--주문 생성----->|               |               |
    |               |               |--결제 요청----->|               |
    |               |               |               |--결제 처리---->|
    |               |               |               |<--결제 승인----|
    |               |               |<--결제 완료----|               |
    |               |               |--재고 업데이트------------------>|
    |               |               |<--재고 확인-----------------------|
    |               |<--주문 확인----|               |               |
    |<--주문 완료----|               |               |               |
    |               |               |               |               |
상태 다이어그램

주문의 상태 변화를 모델링한다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
                      +-------------------+
                      |     Order State   |
                      +-------------------+

  +------------+  주문 접수   +-------------+  결제 확인  +------------+  배송 시작  +------------+
  |            |------------>|             |------------>|            |------------>|            |
->| Created    |             | Processing  |             | Confirmed  |             | Shipped    |
  |            |             |             |             |            |             |            |
  +------------+             +-------------+             +------------+             +------------+
        |                          |                          |                          |
        |                          |                          |                          |
   취소 요청                   결제 실패                   취소 요청                   배송 완료
        |                          |                          |                          |
        v                          v                          v                          v
  +------------+             +-------------+             +------------+             +------------+
  | Cancelled  |             | Failed      |             | Cancelled  |             | Delivered  |
  |            |             |             |             |            |             |            |
  +------------+             +-------------+             +------------+             +------------+

은행 ATM 시스템 모델링

유스케이스 다이어그램

ATM 시스템의 주요 기능과 사용자 상호작용을 모델링한다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
                     +----------------------------+
                     |           ATM 시스템        |
                     |                            |
                     |  +--------------------+    |
                     |  |     카드 인증      |    |
                     |  +--------------------+    |
                     |           |                |
                     |           v                |
 +----------+        |  +--------------------+    |       +-------------+
 |          |------->|  |     잔액 조회      |    |       |             |
 |   고객   |        |  +--------------------+    |<------|   은행 시스템 |
 |          |        |           |                |       |             |
 +----------+        |           |                |       +-------------+
                     |  +--------------------+    |
                     |  |     현금 인출      |    |
                     |  +--------------------+    |
                     |           |                |
                     |           |                |
                     |  +--------------------+    |
                     |  |     현금 입금      |    |
                     |  +--------------------+    |
                     |           |                |
                     |           |                |
                     |  +--------------------+    |
                     |  |     계좌 이체      |    |
                     |  +--------------------+    |
                     |                            |
                     +----------------------------+
클래스 다이어그램

ATM 시스템의 주요 클래스와 그 관계를 모델링한다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
+---------------+       +----------------+       +---------------+
|    ATM        |       |  Transaction   |       |    Account    |
+---------------+       +----------------+       +---------------+
| -id: String   |       | -id: String    |       | -number: String
| -location     |       | -date: Date    |       | -balance: dbl |
| -status       |       | -type: TxnType |       | -status       |
+---------------+       | -amount: dbl   |       +---------------+
| +start()      |       +----------------+       | +debit()      |
| +shutdown()   |       | +execute()     |       | +credit()     |
| +maintenance()|       | +reverse()     |       | +getBalance() |
+---------------+       +----------------+       +---------------+
       | 1                      ^ 1                     | 1
       |                        |                       |
       v 1                      |                       v *
+---------------+               |                +---------------+
|  CardReader   |               |                | Transaction   |
+---------------+               |                +---------------+
| -status       |               |                               
+---------------+               |                
| +readCard()   |<--------------+---------------+                
| +ejectCard()  |               |               |                
+---------------+     +-----------------+ +------------------+ +---------------+
                      |  WithdrawalTxn  | |   DepositTxn    | |  BalanceInqTxn |
                      +-----------------+ +------------------+ +---------------+
                      | -amount: double | | -amount: double  | 
                      +-----------------+ +------------------+ 
                      | +execute()      | | +execute()       | | +execute()    |
                      +-----------------+ +------------------+ +---------------+
활동 다이어그램

ATM 시스템에서 현금 인출 프로세스를 모델링한다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
                         (시작)
                            |
                            v
                     +----------------+
                     |   카드 삽입    |
                     +----------------+
                            |
                            v
                     +----------------+
                     |   PIN 입력     |
                     +----------------+
                            |
                            v
                     < PIN 유효한가? >
                       /          \
                     아니오        예
                      |            |
                      v            v
           +----------------+  +-------------------+
           |  카드 반환     |  |   거래 유형 선택   |
           +----------------+  +-------------------+
                  |                      |
                  v                      v
               (종료)             +-------------------+
                                  |   현금 인출 선택   |
                                  +-------------------+
                                           |
                                           v
                                  +-------------------+
                                  |   금액 입력       |
                                  +-------------------+
                                           |
                                           v
                                  < 잔액 충분한가? >
                                    /           \
                                  아니오         예
                                   |             |
                                   v             v
                     +------------------+  +------------------+
                     | 거래 거절 메시지  |  |   현금 지급      |
                     +------------------+  +------------------+
                              |                     |
                              v                     v
                     +------------------+    +------------------+
                     |    카드 반환     |    |   영수증 출력?   |
                     +------------------+    +------------------+
                              |                /          \
                              v              아니오        예
                           (종료)             |            |
                                              v            v
                                      +------------------+--+
                                      |     카드 반환      |
                                      +-------------------+
                                              |
                                              v
                                           (종료)
시퀀스 다이어그램

ATM 시스템에서 현금 인출 과정의 객체 간 상호작용을 시간 순서대로 모델링한다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
   고객           ATM           카드리더        은행시스템       계좌
    |              |                |               |           |
    |--카드 삽입---->|                |               |           |
    |              |--카드 읽기 요청-->|               |           |
    |              |<--카드 정보------|               |           |
    |<--PIN 요청---|                |               |           |
    |--PIN 입력---->|                |               |           |
    |              |--인증 요청----------------------->|           |
    |              |<--인증 결과-----------------------|           |
    |<--메뉴 표시---|                |               |           |
    |--현금 인출---->|                |               |           |
    |<--금액 요청---|                |               |           |
    |--금액 입력---->|                |               |           |
    |              |--출금 요청----------------------->|           |
    |              |                |               |--계좌 확인-->|
    |              |                |               |<--잔액 확인--|
    |              |<--승인/거절 결과-------------------|           |
    |              |--현금 지급----->|               |           |
    |<--현금 수령---|                |               |           |
    |              |--영수증 출력---->|               |           |
    |<--영수증 수령-|                |               |           |
    |              |--카드 반환----->|               |           |
    |<--카드 수령---|                |               |           |
    |              |                |               |           |
상태 다이어그램

ATM 기기의 상태 변화를 모델링한다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
                 +-------------------+
                 |     ATM State     |
                 +-------------------+

 +------------+  전원 켜기   +-------------+  카드 삽입  +------------+  PIN 검증  +------------+
 |            |------------>|             |------------>|            |------------>|            |
 |   Idle     |             |   Ready     |             |  Card Read |             | Authorized |
 |            |<------------|             |<------------|            |<------------|            |
 +------------+  전원 끄기   +-------------+  카드 방출  +------------+  세션 종료  +------------+
       ^                                                                    |
       |                                                                    |
       |                              +-------------+                       |
       |                              |             |                       |
       +------------------------------|  Processing |<----------------------+
           거래 완료                  |             |     거래 선택
                                      +-------------+
                                          |     ^
                                          |     |
                                        오류    재시도
                                          |     |
                                          v     |
                                      +-------------+
                                      |   Error     |
                                      |             |
                                      +-------------+

UML 모델링 모범 사례와 팁

효과적인 UML 모델링을 위한 가이드라인

  1. 목적과 대상을 명확히 하기: 다이어그램을 작성하기 전에 무엇을 전달하려고 하는지, 누구를 위한 것인지 명확히 한다.
  2. 단순성 유지: 복잡한 시스템을 모델링할 때도 각 다이어그램은 가능한 단순하게 유지한다. 필요하다면 여러 다이어그램으로 나누어 표현한다.
  3. 적절한 추상화 수준 선택: 너무 세부적이거나 너무 추상적이지 않은, 목적에 맞는 추상화 수준을 선택한다.
  4. 일관된 명명 규칙 사용: 모든 다이어그램에서 클래스, 메소드, 속성 등의 이름을 일관되게 사용한다.
  5. 표준 UML 표기법 준수: UML 표준을 최대한 준수하여 모델의 이해도를 높인다.
  6. 적절한 다이어그램 유형 선택: 표현하려는 시스템 측면에 가장 적합한 다이어그램 유형을 선택한다.
  7. 다이어그램 간의 일관성 유지: 여러 다이어그램 간에 요소의 이름, 관계 등이 일관되게 유지되어야 한다.
  8. 주석 및 설명 추가: 복잡한 관계나 특수한 조건에 대해 주석이나 설명을 추가하여 이해를 돕는다.

흔한 실수와 해결 방법

  1. 과도한 세부 사항: 모든 세부 사항을 포함하려고 하면 다이어그램이 복잡해진다. 목적에 맞는 적절한 수준의 세부 사항을 포함하도록 한다.
  2. 불충분한 문서화: 다이어그램만으로는 모든 내용을 전달하기 어렵다. 추가적인 문서화로 보완한다.
  3. 비표준 표기법 사용: UML 표준을 따르지 않으면 오해를 불러일으킬 수 있다. 표준 표기법을 사용한다.
  4. 관계의 잘못된 사용: 연관, 집합, 합성, 의존 등의 관계를 정확히 구분하여 사용한다.
  5. 다이어그램 업데이트 소홀: 시스템이 변경될 때 다이어그램도 함께 업데이트해야 한다.
  6. 너무 많은 요소 포함: 한 다이어그램에 너무 많은 요소를 포함하면 가독성이 떨어진다. 필요하다면 여러 다이어그램으로 나준다.
  7. 적절한 추상화 부족: 핵심 개념과 관계에 초점을 맞추고 불필요한 세부 사항은 생략한다.

실용적인 UML 사용 방법

  1. 필요한 다이어그램만 사용: 모든 UML 다이어그램 유형을 사용할 필요는 없다. 프로젝트의 요구사항과 팀의 특성에 맞는 다이어그램만 선택적으로 사용한다.
  2. 반복적인 개선: 초기 모델은 완벽하지 않을 수 있다. 피드백을 받아 지속적으로 개선한다.
  3. 도구의 효과적인 활용: UML 도구의 기능을 최대한 활용하여 모델링 효율을 높인다.
  4. 팀 협업 강화: UML을 통해 팀원 간의 의사소통을 개선하고 공통된 이해를 형성한다.
  5. 코드 생성 및 역공학: 가능하다면 UML에서 코드를 생성하거나 코드에서 UML을 생성하는 도구를 활용한다.
  6. 프로젝트 문서와 통합: UML 다이어그램을 프로젝트 문서와 통합하여 일관된 문서화를 유지한다.

용어 정리

용어설명

참고 및 출처