본문 바로가기
back-end/JAVA

21) 객체지향-클래스 간의 관계-포함(Composite)

by 모두의 향연 2021. 5. 31.
728x90
반응형

21) 객체지향-클래스 간의 관계-포함(Composite)

 

1. 정의

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

-작은 단위의 클래스를 만들고, 이 들을 조합해서 클래스를 만듦

 

2. 예시

 

<예시1>

Circle 클래스

Circle클래스의 3개의 변수를 선언합니다.

이제 이 클래스를 가지고 객체를 만들어볼게요.

객체생성

이걸 구조화해볼게요. 그림으로 나타내 봅시다.

Circle의 참조 변수 c는 3개의 변수를 가지고 있습니다.

 

 

 

<예시 2>

포함관계 코드

Point클래스로 x, y변수를 선언하고,

Circle클래스로 Point객체를 생성하고 반지름을 추가해줍니다.

이제 Circle의 객체를 만들어줄게요.

객체 생성

이걸 구조화해볼게요. 그림으로 나타내 봅시다.

클래스 Test에서 객체를 생성해준 Cirlce의 참조 변수 c는

Point객체와 반지름 r을 포함하고 있습니다.

Point객체는 변수 x, y를 포함하고 있음으로 위와 같은 그림이 완성됩니다.

 

예시 1이나 예시 2이나 저장공간은 3개로 똑같습니다.

단지, 구조적인 차이만 존재합니다.

포함이라는 것은 다른 클래스에 멤버로 참조 변수를 선언하여 객체를 만드는 것입니다.

상속과 포함 중에 어느 쪽이 좋다고 할 순 없지만, 상속을 쓰면 코드가 복잡하지 않습니다.

예시 1은 x, y, z를 한 번에 쓴 거고, 예시 2는 x, y를 묶어주니까 복잡하지 않다는 장점이 있습니다.

 

 

3. 포함과 상속 구별법

어떻게 구별할까요? 문장을 만들어서 구분하는 방법이 있습니다.

상속: '~은 ~이다(is~a)'

포함: ‘~은 ~을 가지고 있다(has~a)’

 

ex) 원은 점이다.

     원은 점을 가지고 있다.

둘 중 후자가 문장이 자연스럽습니다. 그럼 포함관계를 쓰면 됩니다.

꼭 절대적인 건 아니지만 간단한 방법이니 기억해두세요.

90% 이상이 포함이고, 상속은 제약이 많아서 포함관계가 대부분 쓰입니다.

 

 

 

*유튜브 남궁성 선생님의 `자바의 정석`을 참고하여 만들었습니다*
*자세히 보고 싶은 분들은 유튜브 가서 보시면 됩니다*

728x90
반응형