테마
클래스 간 관계
UML(Unified Modeling Language, 통합 모델링 언어)에서 관계(relationship)는 두 사물이 서로 어떻게 엮여 있는지를 선과 화살표 모양으로 나타낸다. 모양 하나로 "소유하는지, 상속하는지, 잠깐 쓰는지"가 구분되므로, 시험에서는 기호나 예시 문장을 주고 관계 이름을 쓰게 한다. 이 문서는 시험이 묻는 여섯 관계를 UML 2.5.1 명세의 표기로 정리한다. 명세 안에서 집합과 합성은 연관의 한 형태이고, 실체화는 의존의 한 형태다.
여섯 관계 한눈에
| 관계 | 선 | 끝 모양 | 뜻 |
|---|---|---|---|
| 연관 | 실선 | 없음 또는 열린 화살표 | 서로 관련이 있다 |
| 집합 | 실선 | 빈 마름모(전체 쪽) | 부분이 전체와 따로 산다 |
| 합성 | 실선 | 채운 마름모(전체 쪽) | 부분이 전체와 함께 사라진다 |
| 일반화 | 실선 | 빈 삼각형(부모 쪽) | 일반과 구체의 관계 |
| 의존 | 점선 | 열린 화살표(제공자 쪽) | 잠깐 사용한다 |
| 실체화 | 점선 | 빈 삼각형(인터페이스 쪽) | 기능을 구현한다 |
선이 실선이면 비교적 오래가는 구조적 관계이고, 점선이면 사용하거나 약속을 지키는 약한 관계라고 보면 외우기 쉽다.
연관 관계
연관 관계(association)는 두 개 이상의 사물이 서로 관련되어 있다는 가장 일반적인 관계다. 실선으로 잇고, 한쪽만 상대를 안다면 그쪽 방향으로 화살표를 그린다. 양쪽이 서로 알면 화살표를 생략한다. 선 양 끝에는 몇 개가 연결되는지 나타내는 다중도(multiplicity)를 적는다. 예를 들어 운전자와 자동차를 잇는 선의 화살표가 자동차 쪽을 가리키면, 운전자 객체는 자기가 모는 차를 알지만 자동차 객체는 누가 운전하는지 모른다는 뜻이다.
집합 관계와 합성 관계
둘 다 전체와 부분의 관계이고, 마름모를 전체 쪽에 붙인다. 차이는 부분의 수명이다.
집합 관계(aggregation)는 부분이 전체와 독립적으로 존재한다. 빈 마름모로 그린다. 음악 앱의 재생 목록과 곡을 생각하면 된다. 재생 목록을 지워도 곡은 남아 있고, 같은 곡을 다른 재생 목록에 다시 넣을 수 있다.1
합성 관계(composition)는 부분이 전체에 완전히 속해 전체가 사라지면 부분도 사라진다. 채운 마름모로 그린다. 건물과 방이 예다. 건물을 철거하면 그 방도 함께 없어진다. 부분은 한 번에 한 전체에만 속할 수 있다. 시험에서는 포함 관계라고도 부른다.
일반화 관계
일반화 관계(generalization)는 한 사물이 다른 사물보다 더 일반적이거나 더 구체적인 관계다. 일반적인 쪽을 상위(부모), 구체적인 쪽을 하위(자식)라 하고, 하위에서 상위 쪽으로 빈 삼각형 화살표를 그린다. 코드로는 상속에 해당한다. 예를 들어 결제 수단이 상위, 신용카드와 계좌 이체가 하위라면 두 하위에서 결제 수단 쪽으로 화살표가 간다. "신용카드는 결제 수단이다"처럼 "~은 ~이다"가 자연스러우면 일반화다.
의존 관계
의존 관계(dependency)는 소유하지는 않지만 필요할 때 잠깐 사용하는 관계다. 한 클래스가 다른 클래스를 메서드의 매개변수나 지역 변수로 쓰는 경우가 대표적이다. 쓰는 쪽(이용자)에서 쓰이는 쪽(제공자)으로 점선 화살표를 그린다. 제공자가 바뀌면 이용자도 영향을 받으므로 "의존한다"고 한다. 예를 들어 주문 클래스가 결제 금액을 계산하는 메서드에서만 쿠폰 객체를 매개변수로 받아 쓴다면, 주문에서 쿠폰 쪽으로 점선 화살표를 그린다.
실체화 관계
실체화 관계(realization)는 한 사물이 다른 사물이 약속한 기능을 실제로 구현하는 관계다. 인터페이스(interface)가 "이런 기능이 있어야 한다"고 정하면 클래스가 그것을 구현한다. 클래스에서 인터페이스 쪽으로 점선과 빈 삼각형을 그린다. 예를 들어 문자 알림 클래스와 이메일 알림 클래스가 모두 "알림을 보낼 수 있다"는 인터페이스를 구현하면 실체화다. 일반화와 삼각형 모양이 같으므로 선이 실선인지 점선인지로 구분한다.
시험 포인트
- "빈 마름모, 부분이 독립적" → 집합. "채운 마름모, 전체와 생명 주기를 같이함" → 합성.
- "하위에서 상위로 실선 + 빈 삼각형" → 일반화. "점선 + 빈 삼각형" → 실체화.
- "매개변수로 잠깐 사용, 점선 화살표" → 의존. "실선, 서로 관련, 다중도 표기" → 연관.
- 마름모는 전체 쪽, 삼각형은 부모·인터페이스 쪽, 의존 화살표는 제공자 쪽에 붙는다.
참고
UML 2.5.1 명세는 빈 마름모(shared aggregation)의 정확한 의미를 정하지 않고 분야와 모델러에게 맡긴다. ‘부분이 전체와 따로 산다’는 해석은 시험과 교재가 쓰는 관례다. 채운 마름모는 명세도 ‘전체를 지우면 부분도 함께 지워진다’고 정한다. ↩︎
