https://velog.io/@injoon2019/%EC%9E%90%EB%B0%94-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4
Difference between Abstract Class and Interface in Java
https://www.youtube.com/watch?v=VuJHRyIq-w0&ab_channel=%EB%89%B4%EB%A0%89%EC%B2%98
개체들의 공통 분모를 일반화한 이름이다. 추상 클래스는 클라이언트와 상관 없이 개체가 먼저 존재하게되고 클라이언트가 어떤 것을 사용할지 결정하는 것이라면 인터페이스는 반대다.
인터페이스는 개체가 주가되는 것이 아니라 어댑터 (여기에서는 FileSaver)가 주가 된다.
추상 클래스는 키워드 그대로 확장, 상속을 의미함으로써, 물려주는 개념이 된다. (feed 메소드는 물려받았기에 구현할 필요 없다)
그렇기에 부모-자식 관계인 계층 구조를 나타낸다.
하지만 인터페이스는 상속 개념이 아닌, 동일한 동작을 위한 구현을 강제화 한다.
결론적으로, 추상 클래스는 상속 개념, 인터페이스는 그렇지 않다는 것을 이해하면 서로 가지는 목적을 구분짓을 수 있을 것이다.
출처: https://mygumi.tistory.com/257 [마이구미의 HelloWorld]