java에서 extend를 상속이라 표현하고 부모와 자식 관계로 표현하지만 그것은 좀 더 깊은 이해를 하는 대에 있어서 방해될 수 있는 것 같습니다.
이번 포스팅에서 extend를 '확장하다'의 개념으로 접근해서 포스팅해 보겠습니다.
위와 같은 자동차 프로그램을 만든다고 할때 위 그림과 같이 엔진이라는 라이브러리를 import 해서 자동차 프로그램에 사용하는 것을 상속이라 하지 않는다. import는 상태, 행위를 가져와서 사용하는 개념이다.
상속과 import가 다른 점은
상속은 추상화가 가능하고
상태와 행위를 물려 받을 수 있다.
위 두가지 상황을 예를 들어 설명을 하자면
자동차는 엔진을 가져와서 사용해야 한다. 왜냐하면 자동차= 엔진이라고 볼 수 없기 때문이다. 엔진과 자동차는 타입일치가 되지 않는다 그렇기 때문에 물려주는 것이 아니라 가져와서 사용하는 것이다.
그렇다면 오른쪽의 경우에는 가져와서 사용하는것이 아니라 상속할 수 있다. 치즈햄버거도 햄버거고 햄버거는 햄버거 이기때문이다 즉 타입 일치가 가능하다는 것이고 , 타입 일치가 가능하다는 뜻은 추상화된 존재라는 뜻이다.
그래서 다른 어떠한 햄버거를 추가한다고 해도 햄버거를 상속할 수 있다. 왜냐하면 햄버거 자체가 추상화된 존 제이기 때문이다.
콤포지션
상속(타입일치,추상화된 존재)
상채가 아니라 상태 입니다...ㅎㅎ
하지만 위와 같이 상속을 하지 않고 자동차와 엔진처럼 콤포지션을 통해서 사용을 해도 같은 결과가 나온다.
그렇다면 콤포지션을 해도 되지 않는가?
이 문제에 대한 해결책은 추상화에 대해서 이해를 하면 해결할 수 있다.
'JAVA,객체지향' 카테고리의 다른 글
AWT/JFrame 사용해서 그림그려보기 (0) | 2021.11.17 |
---|---|
AWT 라이브러리 개념 (그림 그리는 라이브러리) (0) | 2021.11.17 |
java/라이브러리 만들기 (0) | 2021.11.09 |
JAVA/일반변수와 레퍼런스(참조) 변수 (0) | 2021.10.27 |
메서드 Stack 메모리 (0) | 2021.10.27 |