본문 바로가기
교육, 학습/스프링 입문을 위한 자바 객체지향의 원리와 이해

JAVA의 OOP - 상속관계(is a kind of)

by 개발하는 경제학도 2022. 2. 3.

책 소개

현재 읽고 있는 '스프링 입문을 위한 자바 객체 지향의 원리와 이해' 중의 일부를 적은 내용입니다.


상속 관계

일반적으로 상속 관계는 부모 - 자식 관계라고 알려져 있다. 하지만 재사용+확장 개념으로 보아야 맞다.

 

분류도

이렇게 상속관계는 분류도이다. (가족 관계도처럼 계층도가 아님에 유의한다.)

동물이라는 상위 분류로 갈 수록 추상화, 일반화가 되며 김연아라는 하위분류로 갈수록 구체화, 특수화된 것이다.

 

하위 클래스는 상위 클래스다

상속관계에서는 하위 클래스는 상위 클래스다라는 말을 반드시 만족해야 한다. 

부모- 자식관계와 같이 계층 도라고 볼 수 있는 '딸은 아버지다'라는 말은 이상하게 들린다.

반면 분류도를 나타내는 '사람은 동물이다'는 자연스럽다.

 

확장

자바에서는 inheritance(상속)이라는 키워드는 존재하지 않지만, extends(확장)은 있다. 바로 이 extends가 상속을 표현하지만 실은 확장인 것이다.

 

is a kind of 관계

하위 클래스 is a kind of 상위 클래스

=> 하위 클래스는 상위 클래스의 한 분류이다라는 뜻으로 상속관계를 나타낸다.

예를 들어, '사람 is a kind of 동물'이면 사람은 동물의 한 분류라는 것이다.

 

일반적으로 is a 관계로 상속을 표현하지만, 이는 객체와 클래스의 관계로 오해를 일으킬 수 있다. 따라서 is a kind of로 분류임을 명시하는 것이 더욱 명확한 표현이다.

 

 

다중 상속 대신 인터페이스

자바는 다중 상속을 포기한 대신, 상속과 별개로 인터페이스를 도입했다.

인터페이스

구현 클래스 is able to 인터페이스

=> 구현 클래스는 인터페이스 할  있다는 뜻이다.

인터페이스는 보통 Runnable, Comparable등과 같이 able형태로 만든다.

인터페이스는 클래스가 ' 무엇을 할 수 있다'라는 기능을 구현하도록 강제한다.

 

상위 클래스와 인터페이스

상위 클래스는 물려줄 특성이 많을수록 좋고 (SOLID원칙 중 LSP원칙)

, 인터페이스는 구현을 강제할 메서드가 적을수록 좋다. (SOLID원칙 중 ISP원칙)

댓글