##########0*0 Relationship이란? |
2 .0 Association Relationship |
3 .0 Aggregation Relationship |
4 .0 Relationship의 선택? 및 Reflexive Relationship |
##########1* |
##########2*
Relationship은 클래스 사이의 ‘관계’를 뜻합니다. Relationship이 왜 필요할까요? 독자님들도 고민을 한번 해보시죠. 우선 모델링이 현실의 문제를 추상화 하여 그려내는 것이라는 관점에서 바라보죠. ‘학사관리’라는 문제를 모델링 하는 가운데 등장하는 다양한 개체들 사이에는 어떠한 관계가 존재합니다. 가령, ‘학생’, ‘강좌’나 ‘교수’와 같은 개체들은 서로 관계를 지니고 있습니다. 이러한 관계를 표현하기 위한 것이 Relationship입니다.
주의하실 것은 객체(Object) 사이의 관계를 명시하는 것이 아니라 클래스 사이에 존재하는 관계가 Relationship이라는 점입니다. 앞에 살펴본 것처럼 객체 사이에는 상호작용(interaction)이 존재합니다. 정확하게 말한다면 객체 사이의 관계 역시 클래스의 Relationship으로 정의해야 합니다.
객체는 클래스를 인스턴스화 한 것입니다. 관계는 ‘있었다가 없었다가’ 하는 동적인 것이 아니라 ‘있거나 없는’ 정적인 것입니다. 객체 사이의 관계는 결국 클래스에 정의되어 있는 관계라는 것이죠. 객체 사이의 상호작용도 결국 클래스의 Relationship을 통해서 일어나는 것입니다.
“객체 사이의 메시지가 오고 가는 통로”가 클래스의 Relationship이라고 할 수 있습니다. 머리가 복잡하신가요? 클래스와 객체의 관계와 차이점을 명확하게 알아야 이해할 수 있는 부분이죠. 당장 이해가 안 된다 하더라도 걱정하실 필요는 없습니다. 우선 클래스 사이에 Relationship이 존재한다는 것만 기억하십쇼.
Relationship은 번역서에서 ‘관계’라고 번역하기도 합니다. Relationship은 크게 두 가지 형태로 존재합니다. 첫째는 Association Relationship이고, 다른 하나는 Aggregation Relationship입니다. 이제 각각에 대해서 자세히 알아보도록 하죠.
##########3*
##########6*
1 .0 Relationship이란?
##########4*0 Association Relationship
3 .0 Aggregation Relationship
4 .0 Relationship의 선택? 및 Reflexive Relationship
##########5*
Association은 ‘연관’이라고 번역하기도 합니다. Association은 클래스 사이에 존재하는 의미상 연결을 의미합니다. Association의 표기는 그림 11-1과 같습니다.
그림 11-1. Association Relationship의 표기법
그림 11-1의 Association을 살펴 볼까요? ProfessorCourseManager는 액터인 교수의 입력을 받아서 교수의 강좌(Course)를 처리하는 클래스입니다. 반대로 Course 클래스는 ProfessorCourseManager 클래스에 의해서 관리가 됩니다. 이렇듯 의미상 연결을 갖고 있는 것이 Association Relationship입니다.
이들 클래스는 서로 ‘관리’하고, ‘관리’되는 관계입니다. 따라서, 위의 Association에 Manages와 같은 이름을 붙일 수도 있겠죠? 많은 경우 관계의 이름은 동사를 사용합니다. Rose에서는 Association의 Specification Window(더블클릭 하면 나타나는 거 아시죠?)에서 이름을 입력할 수 있습니다.
동일한 Relationship에 참여한 클래스들은 서로 상반된 입장에 놓이게 됩니다. 다시 말하면 한쪽이 “관리하는” 역할을 수행한다면 반대편 클래스는 “관리되어지는” 역할을 수행하게 되죠. 따라서, Relationship에 이름을 붙일 때에도 “Manages”로 할 수도 있지만, “Be managed”가 될 수도 있습니다.
따라서, 일관적인 규칙이 필요합니다. 보통 좌측에서 우측으로 혹은 위에서 아래로 관계가 성립되도록 작명을 합니다. 예를 들어 관리하는 클래스가 좌측이나 상단에 나오고, 관리 되어지는 클래스가 우측이나 하단에 놓인다면 Relationship의 이름은 “Manages”가 됩니다.
또한 Association에서 서로의 역할을 명시하여 관계를 더욱 명확하게 할 수 있습니다. 이는 Role 탭에서 입력이 가능하며, Association뿐만 아니라 모든 Relationship에서 가능합니다.
이름이나 역할은 필수적인 것은 아닙니다. Relationship을 분명히 하기 위해 추가적으로 표기할 뿐입니다. 또한, Aggregation Relationship은 포함 관계가 일반적이기 때문에 통상 Relationship의 이름을 생략하는 것이 일반적입니다.
Association에 참여하는 객체의 숫자를 정의하기도 합니다. 이를 Multiplicity Indicator라고 합니다. 아래는 Multiplicity Indicator의 예입니다.
1 한 개
0 .. * 없거나 혹은 한 개 이상
1 .. * 한 개 이상
0 .. 1 없거나 혹은 한 개
5 .. 8 5 ~ 8개
5,6 5 혹은 6
위에서 보는 것과 같이 ‘..’은 범위를 나타내고, ‘,’는 ‘또는’을 의미합니다. Rose에서는 Role Detail 탭에서 Multiplicity Indicator를 설정할 수 있을 것입니다. 유의하실 것은 ‘*’ 심볼 대신에 ‘n’을 쓴다는 점입니다. 이를 적용하면 그림 11-2와 같이 나타납니다.
그림 11-2. Association의 Multiplicity Indicators
1 .0 Relationship이란? |
2 .0 Association Relationship |
##########9*0 Aggregation Relationship |
4 .0 Relationship의 선택? 및 Reflexive Relationship |
##########10* |
Aggregation Relationship과 Association Relationship은 전혀 별개의 것은 아닙니다. Aggregation Relationship역시 의미상 연결 관계를 지닌다는 점에서 특수한 Association Relationship으로 분류할 수 있을 것입니다. 아무튼 Aggregation Relationship은 하나의 클래스가 다른 하나의 클래스에 속하거나 포함하는 관계입니다.
Aggregation Relationship은 “part-of”관계, 포함관계 혹은 집합연관이라는 말들로도 불립니다. 두 클래스가 Aggregation Relationship의 관계에 있을 때는 한쪽이 다른 한쪽의 클래스를 포함하고 있는 것과 동시에 한쪽 클래스가 다른 클래스의 일부가 되어 포함되어 지기 때문이죠.
그림 11-3은 Aggregation Relationship의 UML 표기법입니다.
그림 11-3. Aggregation Relationship의 UML 표기법
1 .0 Relationship이란? |
2 .0 Association Relationship |
3 .0 Aggregation Relationship |
##########13*0 Relationship의 선택? 및 Reflexive Relationship |
##########14* |
동일한 클래스가 있다고 참여한다고 해도 Relationship의 유형이 반드시 같은 것은 아닙니다. 각각이 처한 환경 혹은 문맥(Context)에 따라서 클래스 사이의 관계도 달라질 것입니다.
가령, 도서관과 책이라는 두 개의 클래스가 있다고 가정해봅시다. 만일 도서관리 프로그램의 경우라면 도서관 클래스와 책 클래스는 Aggregation Relationship을 갖게 될 것입니다.
반면에 출판사 입장에서 책을 공급하는 도서관을 관리하는 프로그램이라고 한다면, 도서관과 책 클래스는 Aggregation Relationship 관계보다는 Association Relationship을 갖는 것이 일반적일 수 있습니다.
적절한 예가 될지는 모르겠습니다만 아마 다들 이해하셨으리라 믿어집니다. 중요한 것은 이렇게 Relationship이라는 것은 해당 업무 영역(Domain)에 따라 정해지는 것이라는 점입니다.
Reflexive Relationship
동일한 클래스의 복수의 객체가 서로 관계를 갖는 경우가 있습니다. 가령, 선수과목을 생각해보죠. 선수과목 아시죠? ’UML’이라는 과목을 들으려면 ‘자바’ 과목을 먼저 들어야 한다는 식의 학교 규정에 따라 미리 들어야 할 과목을 선수과목이라고 하죠.^^;
선수과목의 경우 하나의 선수과목에 또 다른 선수과목이 있을 수 있습니다. 가령, ‘OOAD’라는 과목을 들으려면 ‘UML’을 먼저 수강했어야 한다면, ‘UML’이라는 선수과목이 ‘자바’라는 또 다른 선수과목과 Association Relationship을 갖게 되는 것입니다.
이러한 관계를 Reflexive Relationship이라고 합니다. 그림 11-4는 Reflexive Relationship의 UML 표기법입니다.
그림 11-4. Reflexive Relationship의 UML 표기법
'UML' 카테고리의 다른 글
[펌] [안영회의 UML 강좌13] - Behavior and Structure(1)-1 (0) | 2010.07.12 |
---|---|
[펌] [안영회의 UML 강좌12] - Iterative Development (0) | 2010.07.12 |
[펌] [안영회의 UML 강좌10] - Object Interaction(2) (0) | 2010.07.12 |
[펌] [안영회의 UML 강좌9] - Object Interaction(1) (0) | 2010.07.12 |
[펌] [안영회의 UML 강좌8] - 클래스 다이어그램 (0) | 2010.07.12 |