인터페이스 VS 추상클래스
인터페이스와 추상클래스를 비교해보겠습니다.
인터페이스
- 모든 멤버 변수는 public static final 이어야합니다. 생략 가능합니다.

- 기본적으로 메서드는 추상 메서드입니다. (인터페이스 내부에서 구현할 수 없습니다.)

- Java 8 부터 static, default method를 사용할 수 있습니다. (상속 시 오버라이딩 할 수 있습니다.)

- 다중 상속이 가능합니다
- 다중 상속중에 같은 default method가 있다면 무조건 오버라이딩 해야합니다.(Compile 오류 발생)

- 상속하는 집합간에 연관 관계가 존재하지 않을 수 있습니다.


추상 클래스
- 클래스에 abstract 키워드를 붙여 사용합니다.

- 인스턴스를 만들 수 없습니다.

- 최소 0개의 추상 메서드를 포함해야합니다.(구현이 없는 메서드)
- 추상 메서드를 포함하면 반드시 클래스도 추상 클래스여야 합니다.

- 인터페이스와는 다르게 다중 상속이 불가능합니다.
인터페이스와 추상클래스의 차이
인터페이스는 각기 다른 클래스를 상속하면서 공통적인 기능을 가질때 사용할 수 있습니다.
곤충과 조류는 생명체입니다.
잠자리는 곤충이면서 날 수 있습니다. 하지만 애벌레는 곤충이지만 날지 못합니다.
참새는 조류입니다. 잠자리와 참새는 각각 곤충과 조류로 다르지만 둘은 모두 날 수 있습니다.
이 경우에 곤충과 조류의 상위 클래스인 생명체에게 “날기” 라는 추상 메서드를 추가할 순 없습니다. 애벌레가 날 수 없기 때문이죠. 이럴 때 Flyable 인터페이스를 사용할 수 있습니다.

그래서 인터페이스는 보통 is able to로 표현됩니다.
잠자리 is able to fly, 참새 is able to fly
추상 클래스는 is a 또는 is kind of 관계로 해석할 수 있습니다.
“고래은 포유류다”
“아파트는 집이다”

