안녕하세요 오늘은 저번 추상화 포스팅에 이어서 상속에 대한 객체지향적인 부분, 왜 상속이 객체지향의 4대 특성에 들어가는지에 대해서 작성을 해 보려고 합니다.
상속이라고 하면 어떤느낌이 오시나요?
저는 처음에 자바에서 상속을 공부할 때만 해도 부모와 자식 간에 그런 관계를 뜻하는 것인지 알았습니다. 그리고 흔히 상속이란 단어가 그렇게 사용되기도 하지요. 하지만 객체 지향이 우리나라로 넘어오면서 생긴 상속에 대한 오해가 있습니다.
사실 상속은 영어단어를 그대로 옮기면서 생긴 오해라고 합니다.
제목에서 말씀드렸다 싶히 상속을 제대로 이해하기 위해선 부모가 자식간 물려주는 그런 상속의 개념이 아닌 재사용과 확장의 개념으로 이해하셔야 조금더 객체지향적인 프로그래밍을 할 수 있습니다.
만약에 상속을 부모가 자식에게 물려준다라는 그런 조직도나 계층적인 개념으로 이해를 하게 된다면 앞뒤가 안 맞는 이상한 상황이 벌어질 수 있기 때문이죠
만약에 엄마클래스와 아들 클래스가 상속관계에 있다고 한다 했을 때 다형성을 적용해서
엄마 철수엄마 = new 아들(); 이런코드가 탄생한다고 가정을 했을 때
//아들을 낳으니 엄마 역할을 하는 철수 엄마라 이름을 지었다??
엄청 이상하지 않나요? ㅎㅎ 그래서 상속을 적용할 때는 이 한 문장만 기억하면 된다고 합니다.
하위 클래스는 상위 클래스다
정말 명쾌하고 간단하지 않나요?!! 저는 프로그래밍을 하면서 어렵고 복잡한 개념들을 이렇게 간단하고 핵심적인 명쾌한 문장으로 해석한 것을 볼 때마다 뭔가 알 수 없는 희열이 느껴지고는 합니다.
자 다시 위에 문장에 계층적인 상속 개념으로 다시 적용을 하면 말이 안 된다는 것을 알 수 있습니다
-아버지는 할아버지다?
-아들은 엄마다?
정말 이상하고 괴이하죠?
하지만 재사용과 확장의 개념을 적용해서 하면 정말 명쾌히 말이 들어맞습니다
-포유류는 동물이다.
-고래는 포유류다.
-고래는 동물이다.
그래서 저는 처음 자바를 막 배웠을 때 상속에 대한 개념이 잘 와 닿지 않았었는데 객체지향에 관련된 책을 읽으면서 이 개념들이 좀 더 다져진 것 같습니다.
그리고 상속을 할 때 사용되는 키워드인 extends라는 단어의 뜻도 '확장'이라는 것을 보면 이 자바언어를 개발하신 분들도 상속에 대해서 정확하게 이해하고 의도한 것이 아닐까 하고 조심 스래 생각을 해보면서
다중 상속에 대해서 조금 더 이야기를 하고 이 포스팅을 마무리하려고 합니다.
왜 자바는 다중 상속을 지원하지 않을까요? 예를 들어서 제가 좋아하는 만화인 이누야샤의 주인공인 이누야샤 클래스를 만든다고 가정해보죠 ㅋㅋㅋㅋ 근데 이누야샤는 반요 이기 때문에 반은 인간이고 반은 요괴입니다.
벌써부터 다중 상속의 문제점이 드러나는 것을 눈치가 빠르신 분은 글을 읽으시면서 캐치하셨을 겁니다.
인간 이누야샤와 요괴 이누야샤가 있는데 반요 이누야샤에게 "싸워!"라는 명령어를 내리면 인간 이누야샤처럼 주먹으로 깔짝깔짝 싸워야 할까요 아니면 요괴 이누야샤처럼 눈이 씨 뻘게져서 손톱을 휘두르며 싸워야 할까요?
위상 황을 코드로 풀어낸다면 뭔가 논리가 안 맞고 애매해진다라는 걸 느낄 수 있으실 겁니다.
이를 상속의 다이아몬드 문제라고 한다고 합니다.
그래서 자바에서는 인터페이스를 도입해서 다중 상속의 득은 취하고 실은 과감하게 버렸다고 하네요 ㅎㅎ
자 오늘은 상속에 대해서 간단하게 정리를 하고 포스팅을 해 보았습니다.
오늘도 긴 글 읽어주셔서 감사합니다.
'JAVA,객체지향' 카테고리의 다른 글
java/라이브러리 만들기 (0) | 2021.11.09 |
---|---|
JAVA/일반변수와 레퍼런스(참조) 변수 (0) | 2021.10.27 |
메서드 Stack 메모리 (0) | 2021.10.27 |
JAVA기본 메모리 운영 (0) | 2021.07.15 |
객체 지향 4대 특성(추상화) (0) | 2021.05.09 |