이번 강의에서는 클래스 간의 관계를 알아볼 거예요.
클래스 다이어그램으로 관계를 나타낼 때 7가지의 관계가 있어요.
일반화 관계(Generalization) 집합 관계(Aggregation) 구성 관계(Composition) 직접 연관 관계(Direct Associtaion) 연관 관계 (Association) 의존 관계 (Dependency) 실현 관계 (Realization)
일반화 관계(Generalization)는 기반 형식과 파생 형식 사이의 관계입니다. “피아니스트는 음악가이다.” 처럼 “이다.”로 표현할 수 있는 형식 사이의 관계입니다. 음악가 종류에는 피아니스트, 드러머, 기타리스트 등이 있죠. 이 때 음악가를 기반 형식이라고 말하고 피아니스트를 파생 형식이라고 말합니다. UML에서는 삼각형과 실선으로 표현합니다.
피아니스트는 음악가이다.
집한 관계(Aggregation)은 컬렉션과 원소 사이의 관계입니다. “필통은 연필과 지우개 등을 가지고 있다.” 처럼 “가지고 있다.” 혹은 “가질 수 있다.”로 표현할 수 있는 형식 사이의 관계입니다.
필통은 연필과 지우개 등을 가지고 있다.
구성 관계(Composition)은 포함 형식과 내부 형식 사이의 관계입니다. “사람은 눈과 귀 등을 가지고 있다.” 처럼 “가지고 있다.” 혹은 “가질 수 있다.”로 표현할 수 있는 형식 사이의 관계입니다.
사람은 눈과 귀 등을 가지고 있다.
이처럼 집합 관계와 구성 관계는 “가지고 있다.”로 표현할 수 있는 형식 사이의 관계입니다. 차이점은 집합 관계에서는 소유 개체와 피소유 개체가 만들어지는 과정이 별도로 진행합니다. 하지만 구성 관계에서는 동시에 진행합니다. 필통과 연필은 별도로 만들어지겠죠. 하지만 눈과 귀는 사람이 태어날 때 가지고 태어납니다.
집합 관계는 대부분 컬렉션과 원소 사이의 관계라고 생각할 수 있어요.
집합 관계는 컬렉션과 원소 사이의 관계
직접 연관 관계(Direct Association)는 가장 흔한 관계입니다. 명령을 내리는 형식과 이를 수행하는 형식 사이의 관계입니다.
고용주는 노동자에게 일을 시킨다.
연관 관계(Association)는 서로 상대를 알고 명령할 수 있는 관계입니다. 프로그램에서 위험한 관계이며 다른 안전한 관계로 바꿀 것은 권합니다.
의존 관계(Dependency)는 원본 개체의 변화에 따라 의존 개체도 변화하는 형식 사이의 관계입니다.
회원 정보가 바뀌면 회원 컨트롤에 표시한 정보를 변경한다.
그리고 어떠한 형식 개체를 생성하는 책임을 갖고 있을 때도 의존 관계로 표시합니다.
실현관계(Realization)는 약속한 기능을 구현하는 관계입니다.