JAVA,객체지향

JAVA/ 상속과 콤포지션

25G 2021. 11. 11. 11:16

java에서 extend를 상속이라 표현하고 부모와 자식 관계로 표현하지만 그것은 좀 더 깊은 이해를 하는 대에 있어서 방해될 수 있는 것 같습니다.

 

이번 포스팅에서 extend를 '확장하다'의 개념으로 접근해서 포스팅해 보겠습니다.

 

위와 같은 자동차 프로그램을 만든다고 할때 위 그림과 같이 엔진이라는 라이브러리를 import 해서 자동차 프로그램에 사용하는 것을 상속이라 하지 않는다. import는 상태, 행위를 가져와서 사용하는 개념이다.

 

상속과 import가 다른 점은

상속은 추상화가 가능하고

상태와 행위를 물려 받을 수 있다.

 

위 두가지 상황을 예를 들어 설명을 하자면

자동차는 엔진을 가져와서 사용해야 한다. 왜냐하면 자동차= 엔진이라고 볼 수 없기 때문이다. 엔진과 자동차는 타입일치가 되지 않는다 그렇기 때문에 물려주는 것이 아니라 가져와서 사용하는 것이다.

그렇다면 오른쪽의 경우에는 가져와서 사용하는것이 아니라 상속할 수 있다. 치즈햄버거도 햄버거고 햄버거는 햄버거 이기때문이다 즉 타입 일치가 가능하다는 것이고 , 타입 일치가 가능하다는 뜻은 추상화된 존재라는 뜻이다.

그래서 다른 어떠한 햄버거를 추가한다고 해도 햄버거를 상속할 수 있다. 왜냐하면 햄버거 자체가 추상화된 존 제이기 때문이다.

 

콤포지션

 

상속(타입일치,추상화된 존재)

상채가 아니라 상태 입니다...ㅎㅎ

 

하지만 위와 같이 상속을 하지 않고 자동차와 엔진처럼 콤포지션을 통해서 사용을 해도 같은 결과가 나온다.

그렇다면 콤포지션을 해도 되지 않는가?

이 문제에 대한 해결책은 추상화에 대해서 이해를 하면 해결할 수 있다.