책 소개
현재 읽고 있는 '스프링 입문을 위한 자바 객체 지향의 원리와 이해' 중의 일부를 적은 내용입니다.
상속 관계
일반적으로 상속 관계는 부모 - 자식 관계라고 알려져 있다. 하지만 재사용+확장 개념으로 보아야 맞다.
분류도
이렇게 상속관계는 분류도이다. (가족 관계도처럼 계층도가 아님에 유의한다.)
동물이라는 상위 분류로 갈 수록 추상화, 일반화가 되며 김연아라는 하위분류로 갈수록 구체화, 특수화된 것이다.
하위 클래스는 상위 클래스다
상속관계에서는 하위 클래스는 상위 클래스다라는 말을 반드시 만족해야 한다.
부모- 자식관계와 같이 계층 도라고 볼 수 있는 '딸은 아버지다'라는 말은 이상하게 들린다.
반면 분류도를 나타내는 '사람은 동물이다'는 자연스럽다.
확장
자바에서는 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원칙)
'교육, 학습 > 스프링 입문을 위한 자바 객체지향의 원리와 이해' 카테고리의 다른 글
JAVA의 OOP - 오버라이딩되면 하위클래스의 메서드가 우선된다 (0) | 2022.02.04 |
---|---|
JAVA의 OOP - 객체, 인스턴스, 클래스 (0) | 2022.02.03 |
JAVA의 OOP - 메서드의 블랙박스화, 전역변수 비권장이유 (0) | 2022.02.03 |
JAVA의 OOP - 절차적, 구조적 프로그래밍의 유산 (0) | 2022.02.02 |
JAVA의 OOP - 자바 개발 환경 JDK, JRE, JVM (0) | 2022.02.02 |
댓글