interface
- 오직 추상 method와 상수만을 멤버로 갖는다. (JDK 1.8부터는 static method와 default method도 가능)
- static method: 선택적으로 override할 수 있고, 객체에서도 호출되고 static으로도 호출 가능
- default method: 선택적으로 override할 수 있음.
- 다중 구현 가능
abstract class
- 상속은 하나만 가능
- 추상 method를 가진 클래스
공통점
- new 연산자로 인스턴스 생성 불가능
- prototype만 있는 method를 갖는다.
- 사용하기 위해서는 확장/구현 해야 한다.
차이점
- MINOR) abstract class는 완성된 method를 사용할 수 있지만, interface는 추상 method와 static, default method 선언만 가능하다. ⇒ 이것은 사실 상속/구현한 입장에서는 크게 다르지 않아 보인다.
- MINOR) abstract class는 다중 상속이 안 된다. interface는 다중 구현(상속)이 가능하다.
- 결국엔 "목적이 다르다"는게 답이다.
- interface ⇒ 구현 객체가 같은 동작을 한다는 것을 보장하는 것이 목적이다.
- abstract class ⇒ 기능을 확장하는 것이 목적이다. 공통적인 기능을 묶어 상위 클래스화하고, 구현이 필요한 것들을 추상화 한다.
- 상태를 가질 수 있는지 여부. abstract class는 기본적으로 클래스라 변수를 가질 수 있다. interface는 instance 변수를 가질 수 없기 때문이다. 상수만이 있을 뿐이다.
- 생성자를 가질 수 있는지 여부. abstract class (O), interface (X)
여담
- interface에 default method가 추가 된 이유는 Collection API의 람다식 지원을 위한 back단 개선이라고 한다. 안 그랬으면 기존의 것들을 전부 deprecated 하고 새로운 버전의 클래스를 만들어야 하는 문제가 발생하기 때문이다.
'Programming > Java' 카테고리의 다른 글
Modern Java In Action 정리 - 12 새로운 날짜와 시간 API (0) | 2020.07.04 |
---|---|
Modern Java In Action 정리 - 11 null 대신 Optional 클래스 (0) | 2020.06.27 |
Modern Java In Action 정리 - 10장 람다를 이용한 도메인 전용 언어 (0) | 2020.06.22 |
Modern Java In Action 정리 - 9장 리팩터링, 테스팅, 디버깅 (0) | 2020.06.13 |
Modern Java In Action 정리 - 8장 컬렉션 API 개선 (0) | 2020.06.06 |