본문 바로가기

gyub's 공부일기/그저 내 공부

자바에서 클래스 다중상속을 막은 이유

※※   그저 공부하는 흐름대로 작성한 것이니 정돈된 글이 아님 주의 ※※

 

클래스 다중 상속에는 여러가지 문제가 내재되어 있다.

예를 들어 변수명 충돌이나 중복된 클래스 상속으로 인해 오버라이딩이 모호한 다이아몬드 문제가 대표적이다.

무엇보다 자바는 객체지향언어이기에 다중상속을 지원하면 객체지향이 무너질 수 있다.

객체지향의 단일책임 원칙에 의해 클래스는 오직 하나의 기능을 가지고 그 하나의 책임에 집중해야되며,

리스코브 치환 원칙에 따라 자식 클래스를 몰라도 부모 클래스의 함수를 사용할 수 있도록 대치가 가능해야 한다.

하지만 다중상속을 허용하면 클래스의 성질이 복합적으로 섞여 부모와 IS-A 관계가 모호해져 정체성이 불분명해질 수 있다.

 

이것은 위 객체지향 원칙에 위배되기에 이런 문제를 막고자 다중상속을 금지하였다.

하지만 단일 상속은 클래스를 경직되게 만들고 유연한 구현이 불가하다.

자바는 이런문제를 InterfaceComposition Pattern 을 사용하여 해결할 수 있다.

구현에 대한 책임implements 하는 클래스에 위임함으로써 다이아몬드 문제를 해결할 수 있고

상속이 아닌 mixin 개념을 사용하여 기능을 확장시킬 수 있다.

mixin 은 클래스가 주 자료형 이외에 추가로 구현할 수 있는 자료형으로써 새로운 기능을 제공할 수 있다.

결국 자료형을 확장함으로써 기능을 추가하되 객체의 정체성은 유지할 수 있다.

Composition Pattern 은 구성이라는 개념을 사용한다.

여러 클래스를 멤버필드에 포함시켜 객체의 기능은 확장시키고 부모 클래스로부터 받은 성격은 유지할 수 있다.

반응형

'gyub's 공부일기 > 그저 내 공부' 카테고리의 다른 글

오버라이딩과 오버로딩  (0) 2021.04.03
interface 사용 이유  (0) 2021.04.03
ListView vs RecyclerView  (0) 2021.04.03
Lambda식이란  (0) 2021.04.03
Java 메모리 구조 Heap, Data, Stack  (0) 2021.04.03