1. Relationship(관계)
Relation 이란?
Class가 개념적으로 서로 연결되어 있을 때, 이 관계를 연관(Association)이라고 부른다
둘 사이의 관계는 방향을 지정해 줄 수 있는데, 채워진 화살표 머리를 붙여주면 된다.
1.1. 연관
한 클래스가 다른 클래스와 연관되면, 각각은 해당 연관 관계 내에서 역할을 가진다. 클래스 옆에 가까이 원하는 역할을 써 줌으로써 연관 관계 내에서의 역할을 표시할 수 있다.
예를 들어 회사부서(영업)와 회사원(영업부원이) 있을 경우의 연관관계는
그림과 같은 관계가 형성된다.
반대로 생각해 볼 수 있는데, 반대 방향이라면 다음과 같은 관계가 형성 될 것이다.
혹 연관관계가 하나의 클래스가 다른 하나의 클래스에 연관된 것 이상으로 복잡해 질 수 있는데,
바로 다음과 같이 여러 개의 클래스가 하나에 클래스에 연결되는 것이다.
l 연관에 대한 제약조건
클래스 흐름상의 제약조건을 걸어두어 제약 사항을 두는 경우가 있을 수 있다.
제약상황이 있는 경우 다음과 같이 사용한다.
예를 들어 은행원과 고객의 경우 은행에 온 순서대로 은행원이 고객에게 서비스를 제공하게 된다.
UML로는 다음과 같이 표기 하면 된다.
제약 조건이 붙는 Class위에 {}기호로 제약조건을 부여 하면 된다.
다음 보여질 Class Association 제약조건은 고등학생이 진로를 정하는데 있어서 학문적인 코스 또는 상업적인 길을 선택할 수 잇다는 상황을 모델링한 것이다.
두 개의 연관선 사이에 점선을 긋고 {or}(제약조건)을 표기하여, or관계를 형성 한다.
l 연관클래스(Association Class)
l 링크(link)
1.2. 다중성(Multiplicity )
부서와 사원이 가지고 있던 지금까지의 연관 관계는 일 대 일 관계였다(즉, 하나의 클래스에 하나의 클래스가 연관되어 있는 상태), 하지만 상식적으로 생각해 볼 때 이것은 말이 안 된다.
하나의 부서에 여러 명의 직원이 즉 부장 과장 대리 사원… 등이 존재 하기 때문이다.
직원의 입장에서 보면 하나의 부서에 연관되어 있는 것이지만, 부서의 입장에서 보면 여러 명의 직원과 연관되어 있다. [이점을 고려하지 않으면 안된다.]
다음과 같은 다이어 그램을 보도록 하자
다중성의 관계를 나타낸 것이다. 어디선가 많이 본듯한 1 ,1…* DB 설계를 하다가 보았던 장면이다. class또한 이렇게 표현할 수 있다고 한다.
[ One to One ] , [ One to Many ], [ One to One or More ], [ One to Zero ],
[ One to XX through XX ], [One to XX or XX]
Dept와 Employee의 관계를 보면 하나의 부서에 여러명의 사원이 존재할 수 있다는 것을 나타낸One to One or More 이다.. 혹 회사와 부서간의 관계도 마찬가지이다. 회사와 부서의 관계는 One to One이 될 수도 있지만, 대부분 회사와 부서는 One to One or More의 관계를 가지고 있다.
두 번째 샘플인 고등학교선생님과 고등학생의 간의 관계 이다.
학교 선생님이 하나이며 고등학생들은 한 명 이상 혹은 다수 이다. One to One or More 관계,
세 번째 샘플인 달걀상자와 달걀의 관계 이다.
달걀 한 박스엔 12개의 계란이 존재할 수도 있고, 또는 24개의 계란이 존재할 수도 있다라는 표기이다.
자 그럼 이곳에서 생각해보자, 과연 선생님과 학생의 관계가 One to One or More 관계만 존재하는지, 현실적인 상황은 그와 같지 않다. 한 명의 학생에 여러 명의 선생님이 계실 수도 있고, 뿐만 아니라 여러 명의 학생에게 여려 명의 선생님이 계실 수도 있다.
즉, 상황에 따라 변화 하는 것이다. 무엇이 이것이다라고 혹은 이것이 저것이다 라며 결론을 내리기에는 현실 생활은 조금은 다른 것 같다.
위와 같은 예제는 어떤 특정한 부분의 혹은 대중적인 생활 패턴, 상황, 환경을 보고 정의를 내린 것 언제든지 변경∙수정 될 수 있다는 점을 염두 하여 두기 바란다.
도움말
다중성을 처음 접하게 되는 사람들 대부분은 위의 말을 이해하는데 애로사항을 많이 느낀다고 한다. 이에, 혼란을 줄이는데 도움을 줄 방법을 하나 보이고자 한다. “몇 대 몇”에서 ‘대(to)’ 의 오른쪽 부분을 큰 따옴표로 묵도록 하자. 즉 일 대일 또는 그 이상은 일 대 “일 또는 그 이상”이 되고, 일 대 일정 범위는 일 대 “일정범위” 가 된다.
집합연관과 복합연관의 차이점
집합연관에서는 컴포넌트가 한 개 이상의 전체에 대한 부분이 될 수 있지만, 복합연관 에서는 컴포넌트가 오직 한 개의 전체에 대한 부분만 될 수 있다.
1.3. 반사연관
클래스는 자신과 연관 관계를 가질 수도 있으며, 이것을 반사연관(reflexive association)이라 한다.
1.4. 수식연관
일 대 다(One – to – Many)의 다중성을 가진 연관 관계에서는 한 객체가 특정한 객체를 가려내어야 하는 상황(이것을 lookup 이라고 한다)이 발생한다. 한쪽 클래스의 객체가 다른 쪽 클래스의 객체를 선택하여 연관 관계 내에서의 역할을 만족시켜야 할 때 첫째 클래스는 자신이 원하는 객체를 찾기 위해 특정한 속성에 의존할 수밖에 없는데, 대개 이 특정한 속성은 ID 번호 같은 식별자에 해당 된다.
예를 들어 본인 혹은 여러분이 호텔 방 예약을 할 때 호텔로부터 호텔방 예약에 대한 확인 번호를 받을 수 있다. 이는 이 번호를 통하여, 어느 사람이 어느 방의 예약자인지 호텔에서 확인할 수 있고, 예약자는 호텔에 예약된 방을 확인해 볼 수 있다.
UML에서 이러한 식별 정보는 수식자(qualifier)라고 하여, 작은 사격형으로 나타내고, on-to-many(다중성)관계에서 one-to-one(일대일)의 관계가 형성된다.
다음은 UML표기법의 예제이다.
연관클래스와 수식연관의 관계도를 동시 표기한 표기이다.
Star UML의 Qualifier 추가를 통해 사용 한다.
(거참..이게 수식연관시 사용하는게 맞는지 모르겠네…)
1.5. 상속과 일반화 ( inheritance generalization )
실체화란 무엇인가? 상속과 무엇이 비슷하고, 무엇이 다른가?
클래스와 인터페이스 사이의 관계로서, “인터페이스 내의 오퍼레이션을 클래스가 실체화한다”라고 한다. 클래스가 인터페이스로부터 오퍼레이션을 취하는 것과 슈퍼클래스로부터 오퍼레이션을 상속받는 것이 비슷하다. 인터페이스로부터 속성을 취하지 않는 다는 것은 슈퍼클래스로부터 속성을 상속받는 것과는 다르다.
객체지향(Object Oriented)개념에서 자주 부아 왔던 내용이다.
객체지향 개념에서의 상속(inheritance)이라 하며 UML에서는 일반화(generalization)이라고 한다.
한 클래스(Sub Class or Child Class)는 다른 클래스로부터(Super Class or Parent Class) 속성과 오퍼레이션을 물려받을 수 있다. 슈퍼클래스는 서브클래스보다 일반적인 특성을 지니게 된다.
1.6. 추상 클래스(abstract class)
l 추상클래스 특징
n Abstract 클래스는 클래스이다
n 추상 메서드와 일반 메서드 일반 맴버매서드를 가질 수 있다.
n 상속을 위해서 extends를 사용한다.
n 오직 단일적으로 extends를 사용한다.
n 모든 추상 메서드를 구현하여야 사용할 수 있다.
n 작업의 레벨 분할을 위해서 사용된다.
n Upcasting이 가능하다.
l 인터페이스의 특징
n 인터페이스도 클래스의 일종이다. 특히 추상 클래스의 일종이다.
n 추상 메서드와 static final 맴버필드만 가질 수 있다.
n 구현을 위해서 implements를 사용한다.
n 여러 개를 중복하여 implements할 수 있다.
n 모든 추상 메서드를 구현하여야 사용할 수 있다.
n 공동 작업을 위한 상호간의 인터페이스를 위해 사용된다.
n Upcasting이 가능하다.
(세명대학교 이명호 교수님 "초보자도 할 수 있는JAVA2PROGRAMMING & JAVA2JDK5.0" 책 발췌)
UML에서 추상클래스의 표기는 다음과 같이 ClassName을 이탤릭체로 나타낸다
1.7. 의존관계 (dependency)
“한 클래스가 다른 클래스를 사용하는”관계가 하나 더 있다. 이것을 의존 관계(dependency)
라고 한다. 의존 관계가 가장 흔하게 드러난 예는 다른 클래스를 사용하는 오퍼레이션의 스그너스그 보일 때 이다.
예를 들어 여러분이 학사정보 시스템을 사용 한다고 가정해 보고 수강신청을 하기 위해 준비 하였다고 하자. 수강신청을 하기 위해 Lecture 클래스와 LectureForm이라는 클래스를 가지고 있고 Lecture 클래스 에서 form(LectureForm f)이라는 오퍼레이션 가지고 있다고 하자.
UML 표기법으로 보면 다음과 같다.
Operation 표기 방법은 [접근제어자 메소드명 (기본생성자 변수명) : 리턴타입]
[public void form(LectureForm f)]
+ 표시가 무엇인지 아규먼트 안에 표시된 내용은 왜 뒤바뀌었는지 리턴타입은 왜 마지막에 표시하는지 : 은 무엇인지 무지 궁금할 것이다.
조금 뒤에 살펴 볼 수 있으니 기다려 주기 바란다.
1.8. ClassDiangram 과 ObjectDiagram
클래스 다이어그램은 일반적인 정의성(definitional) 정보 (클래스의 특성과 속성뿐만 아니라 다른
클래스와의 연관)를 알려준다. 반면에 객체 다이어그램은 클래스의 특정한 인스턴스 정보와 어떠한 상황에 처해 있는지의 정보를 보여준다. 시간의 개념(instants)과 인스턴스(instances)는 객체 다이어그램의 개념을 잘 설명할 수 있는 단어가 되겠다.
실제 Diagram 관련 표식은 잠시 뒤에 UpLoad 하겠다.. 그림이 너무많다.......
카피 엔 페이스트로 하는데 그림은 복사가 안댄다 ^^;;
'소프트웨어공학 > UML' 카테고리의 다른 글
UML < Diagram 집합연관_복합연관_인터페이스_실체화 > Stap_4 (0) | 2008.06.11 |
---|---|
UML < Diagram의 종류 > Stap_2 (2) | 2008.04.17 |
UML < Diagram의 종류 > Stap_1 (0) | 2008.04.14 |
UML 목차 (0) | 2008.04.14 |