본문 바로가기
Knowledge/CS

상속과 구현의 차이

by YoonJong 2022. 8. 9.
728x90

상속(Extends) 이란?

 - 자식이 부모의 특징을 상속받아 사용한다는 특징을 가지고 있다.

 - 코드의 재사용성을 높이고 코드의 중복성을 최소화 할 수 있다.

 - 자식이 원하는 특징을 추가 및 확장이 가능하다.

 

구현(Implements) 이란?

 -  특정 인터페이스를 클래에서 구현한다.

 - 인터페이스에서 정의한 메서드에 강제력이 생긴다.

 - 인터페이스를 구현한 클래스에서 인터페이스의 메서드를 재정의해서 구현해야 한다.

 - 인터페이스의 내용이 바뀌면 이를 구현하는 모든 클래스의 코드가 변경되어야 한다.

 

다중 상속은 불가능하지만 다중 구현은 가능하다.

 


상속과 구현에 대해 알아보던 중, 스프링에서는 상속을 사용하기보다 대부분 구현을 사용하는데 

왜 그럴까??? 라는 의문이 들어 추가로 찾아보았다.

 

상속의 단점과 한계점

 1. 캡슐화가 깨지고, 결합도가 높아진다.

 2. 유연성 및 확장성이 떨어진다.

   - 객체지향에서는 결합도는 낮을 수록, 응집도는 높을 수록 좋다

   - 부모클래스와 자식클래스 관계가 컴파일 시점에 구현에 의존한다.

   - 다형성 사용이 불가능하다.

 

 3. 다중상속이 불가능하다.

 

 

위의 예제를 보면 어느 상황에서 추상클래스를 사용하고, 인터페이스를 사용해야 하는지 알 수 있다.

 

추상클래스는 IS - A "~이다".

인터페이스는 HAS - A "~을 할 수 있는" 이라고 생각하면 이해가 쉽다.


 

참고

https://hyunmin1906.tistory.com/205

 

[JAVA] 상속(extends)과 구현(implements)의 차이

■ 상속(extends) 상속은 자식이 부모의 특징을 상속받아서 사용가능하다는 특징이 있습니다. 이를 통해 코드의 재사용성을 높이고 코드의 중복성을 최소화 할 수 있습니다. 따라서 자식은 부모의

hyunmin1906.tistory.com

https://mangkyu.tistory.com/199

 

[OOP] 코드의 재사용, 상속(Inheritance)보다 합성(Composition)을 사용해야 하는 이유

객체지향 프로그래밍에서 코드를 재사용하기 위한 방법으로 크게 상속과 합성이 있습니다. 대부분의 경우 상속보다 합성을 이용하는 것이 좋은데, 이번에는 왜 합성을 사용해야 하는지에 대해

mangkyu.tistory.com

https://myjamong.tistory.com/150

 

[JAVA] 추상클래스 VS 인터페이스 왜 사용할까? 차이점, 예제로 확인 :: 마이자몽

추상클래스 인터페이스 왜... 사용할까? 우리는 추상클래스와 인터페이스에 대해서 알고 있냐고 누가 물어본다면 알고 있다고 대답을 하고있습니다. 그런데 이론적인 내용 말고 정작 "왜 사용하

myjamong.tistory.com

 

728x90

댓글