UML and Class Diagram — UML과 클래스 다이어그램

소프트웨어 설계를 머릿속으로만 구상하면 의사소통이 어렵고 복잡성을 관리할 수 없다. UML은 설계를 시각적으로 표현하는 표준 언어이며, 그중 클래스 다이어그램은 객체지향 설계의 핵심 도구이다.

UML (Unified Modeling Language)

UML은 시스템을 시각적으로 설계하고 문서화하는데 사용되는 표준화된 모델링 언어이다. 소프트웨어뿐만 아니라 비즈니스 프로세스, 조직 구조 등 여러 분야에서 사용될 수 있는 범용적 모델링 언어이다.

객체 지향 설계 개념을 기반으로 하며, 다양한 다이어그램을 통해 시스템의 구조, 동작, 상호작용 등을 표현한다. UML은 총 12개의 다이어그램을 제시한다.

UML 12개 다이어그램

  • 구조 다이어그램(Structural Diagram): 클래스, 객체, 복합 구조, 배치, 컴포넌트, 패키지
  • 행위 다이어그램(Behavioral Diagram): 활동, 유스케이스, 상태 머신
  • 상호작용 다이어그램(Interaction Diagram): 순차, 통신, 타이밍

클래스 다이어그램

클래스 다이어그램은 시스템을 구성하는 클래스, 클래스의 속성(데이터)과 메서드, 클래스 간의 관계 등을 시각적으로 표현한다. 세 칸의 직사각형 모양으로 클래스를 표현한다.

클래스 이름

  • 다른 클래스와 구별되는 유일한 이름을 가진다
  • 명사 또는 명사구 사용
  • 두 단어를 사용할 때는 각 단어의 첫 글자는 대문자로 쓴다 (PascalCase)

속성 (Attributes)

  • 클래스가 가지는 특성 또는 변수
  • 이름은 소문자로 나타내며 두 단어를 사용 할 때는 두 번째 단어의 첫 글자는 대문자로 쓴다 (camelCase)

메서드 (Operations)

  • 클래스가 수행할 수 있는 동작 또는 함수

가시성 (Visibility)

속성과 메서드의 접근 권한을 지정하는 방식이다.

가시성 기호 설명
공개(public) + 같은 시스템에 있는 모든 클래스에 접근할 수 있다
은닉(private) - 같은 시스템 내의 다른 클래스는 직접 접근할 수 없고 해당 클래스의 메서드를 통해서만 접근할 수 있다
부분 공개(protected) # 다른 클래스가 접근할 수 없고 해당 클래스의 메서드와 클래스를 상속받은 하위 클래스만 접근할 수 있다

클래스 간의 관계

객체지향 시스템은 클래스들이 모여 서로 관계를 맺고, 관계를 통해 메시지를 주고 받으며 기능을 제공한다.

1. 연관 관계 (Association Relationship)

클래스 간에 서로 메시지를 주고받으며 이용하는 관계이다. 한 클래스가 상대 클래스에서 제공하는 기능을 사용한다.

양방향 연관 관계: 단순한 연관 관계로 ‘교수는 학생에게 수업하고, 학생은 교수에게 수업을 받는다’로 해석한다. 실선으로 연결한다.

역할이 부여된 연관 관계: 연관 관계에서 각자에게 역할을 부여할 수 있다. 교수의 역할은 ‘강의자’, 학생의 역할은 ‘수강자’라 할 수 있다.

다중 연관 관계: 다중 관계는 다양하게 나올 수 있으며 선 위에 다중성을 표기해 나타낸다.

표기 의미
1 오직 하나, 즉 1
0..* (또는 *) 다수(0 포함), 즉 0(없거나) 또는 1 이상
1..* 다수(0 제외), 즉 1 이상
0..1 0(없거나) 아니면 1, 즉 0 또는 1

단방향 연관 관계: 두 클래스가 서로 아는 관계가 아니고 한쪽만 아는 관계를 나타낸다. 방향성을 나타내는 화살표가 있는 직선 실선으로 표현한다.

연관 클래스: 연관 관계를 더 구체적으로 나타내고 싶을 때 클래스를 추가해 사용하는 것이다. 점선을 사용해 나타내며, 일반 클래스처럼 다른 클래스와도 연관 관계를 맺을 수 있다.

2. 일반화 관계 (Generalization Relationship)

클래스에서 일반화란 공통점을 가지고 있는 여러 개의 클래스를 묶어서 새로운 클래스를 만들고 공통적인 이름을 붙인 것이다. 일반화 관계는 상속 구조이며 하위 클래스는 상위 클래스의 모든 것(속성, 메서드)을 상속받아 사용한다.

개별 클래스와 공통 클래스 사이에 ‘is a kind of’ 관계가 성립되어야 한다. 예: ‘사각형은 도형의 일종이다’, ‘원은 도형의 일종이다’

일반화 관계

빈 삼각형 화살표(△)로 하위 클래스에서 상위 클래스 방향을 가리킨다.

3. 집합 관계 (Aggregation Relationship)

‘상위 클래스가 하위 클래스로 구성될 때’의 관계로 ‘is composed of’가 성립되어야 한다. 모든 객체가 별개의 생명주기를 가지고 있으며, 각각 독립적으로 동작하기 때문에 약한 결합 관계이다.

예: 컴퓨터는 모니터, 본체, 키보드로 이루어졌다. 모니터는 다른 컴퓨터에서도 사용할 수 있으며, 모니터가 고장나면 모니터만 다른 것으로 교체 가능하다.

빈 다이아몬드(◇)로 전체 쪽을 표시한다.

4. 합성 관계 (Composition Relationship)

집합 관계와 많은 부분이 유사하지만, 전체 객체에 완전히 종속되어 독립된 객체로 존재할 수 없다는 것이 다르다. 모든 객체가 같은 생명주기를 가지고 있으므로 각각 독립적으로 동작할 수 없는 강한 결합 관계이다.

예: 노트북은 본체, 모니터, 키보드가 일체형으로 되어 있고, 각각을 분리해 다른 곳에서 재사용할 수 없다.

채워진 다이아몬드(◆)로 전체 쪽을 표시한다.

5. 의존 관계 (Dependency Relationship)

서로 상대의 클래스를 사용(참조)할 때의 관계로 클래스 A의 변화는 클래스 B의 변화로 연결되는 점에서 연관 관계와 유사하다. 연관 관계는 지속적이고 강한 양방향 관계를 의미하며 객체 간의 강력한 연결을 표현하는 반면, 의존 관계는 일시적이고 약한 결합 관계로 특정 기능을 수행할 때만 필요로 하는 관계를 표현한다.

핵심 차이: 연관 관계는 상대 클래스를 인식하기 위해 멤버 변수를 가지지만, 의존 관계는 메서드에서 상대 객체를 사용하는 것으로 짧은 시간만 관계가 유지된다.

점선 화살표(- - ->)로 표현한다.

6. 실체화 관계 (Realization Relationship)

인터페이스 클래스는 ‘메서드’의 공통 특성을 묶어 새로운 인터페이스 클래스를 생성한다. 일반화 관계는 공통 특성을 갖는 클래스를 생성하여 상속 구조를 갖지만, 실체화 관계의 인터페이스 클래스는 변수를 정의할 수 없고 추상 메서드를 가지며 이 메서드에 대한 구체적인 실현은 하위 클래스에서 구현한다.

스테레오 타입으로 <<interface>>를 사용하고 하위 클래스와의 관계는 일반화 관계와 다르게 점선으로 나타낸다.

예: 버스와 지하철에 환승 기능을 넣고 싶을 때 (택시는 환승이 불가), Transferable이라는 인터페이스 클래스를 생성하고 환승이 가능한 버스와 지하철에만 환승 기능을 구현한다.

클래스 관계 요약

관계 UML 표기 설명 키워드
연관 실선 서로 메시지를 주고받는 관계 멤버 변수 보유
일반화 빈 삼각형 화살표 상속 관계 is a kind of
집합 빈 다이아몬드 약한 결합, 독립 생명주기 is composed of (약함)
합성 채워진 다이아몬드 강한 결합, 동일 생명주기 is composed of (강함)
의존 점선 화살표 일시적 사용 관계 메서드 내 객체 사용
실체화 점선 빈 삼각형 인터페이스 구현 «interface»