상속과 인터페이스는 블로그 내에서도 한 세번?이상 다룬 것 같은데
아직도 새롭게 이해되는 부분이 있는 걸 보면 아직 제대로 이해 못한 것 같아서
스프링 입문을 위한 자바 객체 지향의 원리와 이해 책에서 이해한 내용을 바탕으로 다시 정리해보려고 한다!.
🐧 상속
객체지향에서 상속을 설명할때 예로 부모 - 자식 관계를 예시로 들며 설명하지만
객체지향에서의 상속은 계층/조직적인 상속 보다는 재사용과 확장으로 이해하는 것이 맞고,
객체지향에서의 상속은 상위 클래스의 특성을 하위 ㅡㅋㄹ래스에서 상속하고, 필요한 특성을 추가 / 확장해서 사용할 수 있다는 의미이다.
객체지향의 상속을 부모-자식의 계층도로 나타내었을때와, 분류도로 나타내었을때의 차이로 보면 위와 같이 분류된다.
상속관계에서 반드시 만족해야하는 문장인 ' 하위 클래스는 상위 클래스이다'를 위 예시에 빗대어 얘기하면 분류도로 표현하는게 더 자연스럽다.
📍 상속은 is a kind of 관계를 만족한다?
: 하위클래스 is a kind of 상위 클래스
: 한식 is a kind of 음식
: 고래 is a kind of 동물
🐟 다중 상속 왜 안되는데?
자바에서는 다중 상속을 지원하지 않는데, 그 이유에 대해서 그동안 이해가 안됐는데 이해가 되어버렸다.
위 그림처럼 다중상속을 지원하게되면 인어는 수영이라는 기능을 수행할때 사람처럼 수영해야할지, 물고기처럼 헤엄쳐야할지 고민해야한다.
다중상속의 다이아몬드 문제 - 어떤 상위 클래스의 필드와 메서드를 상속받아야하는가? - 어떤 상위 클래스에 어떻게 접근해야하는가? |
이와 같은 문제를 다중 상속의 다이아몬드 문제라고하고, 인터페이스를 통해 다중상속같이(?) 구현은 가능하다.
🧜🏻♀️ 인터페이스
: 개발코드와 객체를 서로 통신하는 접점의 역할
: 구현클래스 is able to 인터페이스 ( 구현 클래스는 인터페이스를 할 수 있다. )
인터페이스는 위 그림과 같이 "무엇을 할 수 있는" 의 형태로 어떠한 기능을 나타낼때 사용한다.
상위클래스는 하위클래스에게 특성(속성과 메서드)를 상속해주고, 인터페이스는 클래스가 '무엇을 할 수 있다'라고 하는 기능을 구현하도록 강제한다.
그럼 왜 인터페이스는 다중 상속이 될까?
인터페이스는 상속받은 메소드가 구현체가 없는 추상 메소드이기 때문이다.
어차피 구현체가 없고, 상속받은 객체에서 구현을 할 것 이기 때문에 상속받은 메서드가 어떤 상위 클래스로부터 받은 특성인지 몰라도 된다.
그래서 사용 가능함 !
✅ Check-Point
: 객체 지향의 상속은 상위 클래스의 특성을 재사용하고, 확장한다.
: 객체지향의 상속은 is a kind of 관계를 만족한다.
: 인터페이스는 구현클래스 is able to 인터페이스의 관계를 만족한다.
: 상속은 다중상속이 불가하고, 인터페이스는 다중 상속이 가능하다.
'✏️ Java' 카테고리의 다른 글
| ETC | ISP (인터페이스 분리 원칙) 뭔데! (0) | 2022.12.20 |
---|---|
| ETC | 추상클래스와 인터페이스가 뭔데 🥺 (0) | 2022.12.17 |
| 혼공자 | Chapter 8.1 인터페이스 (0) | 2022.12.12 |
| ETC | 프로세스와 스레드 (0) | 2022.12.10 |
| 혼공자 | Chapter 7.1 상속 (0) | 2022.12.05 |