추상 메서드와 인터페이스의 차이점
추상 메서드 : default 기능
인터페이스 : 추가 및 변경될 수 있는 기능
개념적 차이점
정의
- 추상 클래스 : 미완성 설계도
- 인터페이스 : 기본 설계도
존재 목적
- 추상 클래스 : 추상클래스를 상속받아 기능을 이용하고 확장
'상속' 개념이 들어간다
- 인터페이스 : 추상메서드의 구현을 강제
'호환성' 개념이 들어간다.
상속 수 차이
- 추상 클래스 : 부모 클래스는 무조건 1개
- 인터페이스 : 부모 인터페이스는 다중 상속이 가능(2개이상 가능)
가질 수 있는 필드와 메서드
사용용도
- 추상 클래스 : 추상클래스는 ~ 이다.
- 인터페이스 : 인터페이스는 ~ 할 수 있다.
인터페이스에서 공통의 default 메서드를 상속받을 때 일어나는 일
- commonfun(); 이라는 공통의 default 메서드를 가진 인터페이스 A,B를 다중 상속 받는 클래스 C 가 존재할 때, 클래스 C에서는 무조건 commonfun(); 함수를 재정의(오버라이딩)해야 한다.
예제
- 집(house)이 존재한다.
- 집이라는 추상 클래스는 집을 들어가는 방법(void in(){})을 추상 메서드로 정의하고 있다.
- 집은 여러가지 종류가 있다. ex: 아파트, 주택 등
- 이때 집이라는 추상 클래스를 상속받아 아파트 또는 주택이라는 자식 클래스를 생성한다.
- 아파트에 들어갈려면 엘리베이터를 타야 하며, 주택은 들어갈 때계단을 올라가야 하기 때문에 추상 클래스 하위 추상 메서드(void in(){})를 오버라이딩해 정의해 준다.
- 아파트던 주택이던 집을 들어가기 위해선 도어락을 가지고 있다.
- 도어락의 브랜드는 무수하다. 그래서 인터페이스로 정의한다.
- 도어락은 기본 기능은 브랜드별로 동일하지만, 작동방법이 조금씩 상이하다.
- 각 브랜드별 도어락을 도어락 인터페이스를 상속받아 정의할 수 있다.
- 만약 집에 들어가는 방법(void in(){}) 메서드에 도어락 메서드를 사용한다면 해당 브랜드별 도어락 인터페이스만 갈아끼워주면 된다.