innn

포함 관계(Composite, has-a, 90%가 포함 관계!!) 본문

JAVA/자바의 정석 기초편_남궁성(2020)

포함 관계(Composite, has-a, 90%가 포함 관계!!)

33삼 2022. 7. 6. 00:49

클래스의 관계는 크게 두 가지로 나뉜다.

1. 상속 

2. 포함

 

포함이란?(Composite)

- 클래스의 멤버로 참조변수를 선언하는 것.

어느 쪽이 더 좋다고 말할 순 없지만, 오른쪽이 왼쪽보다 복잡도가 줄어든다.

왼쪽은 저장공간이 xyr 세 개다.

오른쪽 역시 저장공간은 xyr로 세개다.(r위의 객체 c는 x,y의 주소번지를 갖고 있기때문에 저장공간이 아니다.)

두 경우 저장공간은 동일하지만 구조만 다른셈이다. 

 

카 클래스에 엔진 클래스와 도어 클래스가 있다. 복잡도를 줄이기 위해서다. 이런 것을 포함이라고 한다.

 

클래스 간의 관계를 결정할때 

언제 상속하고 언제 포함할까?

가장 간단한 방법은 문장을 만드는 것이다.

is a 관계면 상속 관계

has a 관계는 포함 관계다.

 

원은 점이다

원은 점을 가지고 있다.

어느 문장이 더 자연스러울까 ? 두번째다. 

사실, 대부분의 경우는 포함이다. (90퍼센트) 상속은 조건이 까다롭기 때문

저장공간은 3개로 같지만 이렇게 상속과 포함은 구조가 다르다.

 

상속

생성된 객체를 메모리를 그림으로 그려보는 것이 설계에 중요하다.

 

포함관계

 

 

상속과 다르게 포함관계에 있는 객체는 참조변수를 한 번더 적어준다. (당연함 그 객체를 거쳐온 변수이기 때문)

상속은 이미 명시돼있지 않더라도 그 객체 안에 포함되어있기 때문에 참조변수가 하나 뿐인 것이다.

'JAVA > 자바의 정석 기초편_남궁성(2020)' 카테고리의 다른 글

생성자 this() 와 참조변수 this  (0) 2022.07.06
단일 상속, Object 클래스  (0) 2022.07.06
상속관계  (0) 2022.07.06
생성자(Constructor)  (0) 2022.06.26
오버로딩(Overloading)  (0) 2022.06.25