상속(Extends) 이란?
- 자식이 부모의 특징을 상속받아 사용한다는 특징을 가지고 있다.
- 코드의 재사용성을 높이고 코드의 중복성을 최소화 할 수 있다.
- 자식이 원하는 특징을 추가 및 확장이 가능하다.
구현(Implements) 이란?
- 특정 인터페이스를 클래에서 구현한다.
- 인터페이스에서 정의한 메서드에 강제력이 생긴다.
- 인터페이스를 구현한 클래스에서 인터페이스의 메서드를 재정의해서 구현해야 한다.
- 인터페이스의 내용이 바뀌면 이를 구현하는 모든 클래스의 코드가 변경되어야 한다.
다중 상속은 불가능하지만 다중 구현은 가능하다.
상속과 구현에 대해 알아보던 중, 스프링에서는 상속을 사용하기보다 대부분 구현을 사용하는데
왜 그럴까??? 라는 의문이 들어 추가로 찾아보았다.
상속의 단점과 한계점
1. 캡슐화가 깨지고, 결합도가 높아진다.
2. 유연성 및 확장성이 떨어진다.
- 객체지향에서는 결합도는 낮을 수록, 응집도는 높을 수록 좋다
- 부모클래스와 자식클래스 관계가 컴파일 시점에 구현에 의존한다.
- 다형성 사용이 불가능하다.
3. 다중상속이 불가능하다.
위의 예제를 보면 어느 상황에서 추상클래스를 사용하고, 인터페이스를 사용해야 하는지 알 수 있다.
추상클래스는 IS - A "~이다".
인터페이스는 HAS - A "~을 할 수 있는" 이라고 생각하면 이해가 쉽다.
참고
https://hyunmin1906.tistory.com/205
https://mangkyu.tistory.com/199
https://myjamong.tistory.com/150
'Knowledge > CS' 카테고리의 다른 글
시간복잡도란 무엇인가? 다른방법은? (0) | 2022.08.13 |
---|---|
block I/O VS non-block I/O 개념 (0) | 2022.08.11 |
데이터베이스와 파일처리 시스템의 차이 (0) | 2022.08.09 |
여기저기 참고한 예상질문 정리 - 네트워크 (0) | 2022.07.27 |
[CS] HTTP 상태 코드 (0) | 2022.05.18 |
댓글