본문 바로가기
알고리즘/디자인 패턴

5. 클래스 관계 (Class Relationships)

by 지칸 2021. 3. 15.

안녕하세요. 지칸입니다.

본 글에서는 클래스간의 관계에 대해 설명하겠습니다.

 

1) 관계의 종류

2) 의존관계

3) 연관관계

4) 집합관계 & 합성관계

5) 상속관계


1) 관계의 종류

객체지향 프로그래밍은 클래스를 정의하고 클래스간의 메시지 패싱으로 소통하며

목적을 달성하는 방식을 의미하고 있습니다.

그리고 다양한 클래스간의 관계에 대해서도 정의가 되어야 합니다.

 

이 관계는 총 5개로 분류하고 있습니다.

Dependency Association Aggregation Composition Inheritance
약한 관계<------------------------------------------------------------------------>강한 관계

 


2) Dependency 의존관계

Dependency는 A 클래스가 B클래스를 일시적으로 참조하는 형태를 말합니다.

예를들면, A 클래스의 어느 함수내부에서 B 클래스 인스턴스를 생성하고 함수 종료시 그 인스턴스는 소멸하게 되는 것처럼 일시적인 관계를 의미합니다.


3) Association 연관관계

Association은 Dependency처럼 일시적으로 사라지는 관계가 아닌 클래스 필드로 가지고 있는 형태를 말합니다.

예를들면, A 클래스의 변수로 클래스 B 인스턴스를 정의하는 것입니다.

A클래스 함수내에서 B 인스턴스의 함수들을 자유롭게 사용하는 방식입니다.

ClassA 내부에 ClassB b 변수를 정의하고 getVar함수에서 사용하고 있습니다.

Dependency 관계와 차이점으로 b 인스턴스는 getVar함수가 리턴된 이후로도 남아있다는 점입니다.


4) Aggregation 집합관계 & Composition 합성관계

Aggregation와 Composition는 Association의 특수한 관계를 의미합니다. 

Composition은 클래스 A <>---  클래스 B 의 관계는 클래스 A가 없으면 클래스 B도 없다는 걸 의미합니다.

(클래스 B의 라이프 사이클이 클래스 A에게 종속됨을 의미)

반면, Aggregation은 클래스 A가 없어도 클래스 B는 존재하는 관계를 말합니다.

코드로 비교해보겠습니다.

좌) Composition, 우) Aggregation

일반적으로 Composition 이외에는 Aggregation이라 생각하시면 됩니다.


5) Inheritance 상속관계

상속관계는 너무 일반적인 내용이라.. 생략하겠습니다.

반응형

댓글