Dev-Kyuu
article thumbnail
Published 2022. 12. 13. 02:43
| ETC | 상속과 인터페이스 ✏️ Java

상속과 인터페이스는 블로그 내에서도 한 세번?이상 다룬 것 같은데

아직도 새롭게 이해되는 부분이 있는 걸 보면 아직 제대로 이해 못한 것 같아서 

스프링 입문을 위한 자바 객체 지향의 원리와 이해 책에서 이해한 내용을 바탕으로 다시 정리해보려고 한다!.

 

🐧 상속

객체지향에서 상속을 설명할때 예로 부모 - 자식 관계를 예시로 들며 설명하지만

객체지향에서의 상속은 계층/조직적인 상속 보다는 재사용과 확장으로 이해하는 것이 맞고,

객체지향에서의 상속은 상위 클래스의 특성을 하위 ㅡㅋㄹ래스에서 상속하고, 필요한 특성을 추가 / 확장해서 사용할 수 있다는 의미이다.

 

객체지향의 상속을 부모-자식의 계층도로 나타내었을때와, 분류도로 나타내었을때의 차이로 보면 위와 같이 분류된다.

상속관계에서 반드시 만족해야하는 문장인 ' 하위 클래스는 상위 클래스이다'를 위 예시에 빗대어 얘기하면 분류도로 표현하는게 더 자연스럽다.

 

📍 상속은 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 인터페이스의 관계를 만족한다.

: 상속은 다중상속이 불가하고, 인터페이스는 다중 상속이 가능하다.

 

profile

Dev-Kyuu

@kyuu_ng

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!