근본 적인 차이
언제 사용할지
객체의 행위만을 정의 할때에는 interface를 사용 ex)마지막 문제는 인터페이스가 더 적합함.
추상클래스는 IS - A "~이다".
인터페이스는 HAS - A "~을 할 수 있는"
구현을 주고 싶을때는 추상클래스 사용
기본적으로 추상화 관계에서 인터페이스 사용을 고려하고 구현이 필요하면서 명확한 IS-A관계일 경우 abstract class상속을 고려한다.
Oracle 웹 사이트 는 클래스 interface와 abstract클래스의 주요 차이점을 제공합니다 .
인터페이스 : 여러 관련되지 않은 객체로 계약을 구현합니다. “ HAS A “기능을 제공합니다.
추상 클래스 : 여러 관련 개체간에 동일하거나 다른 동작을 구현합니다. “ IS A “관계를 설정합니다.
다음과 같은 경우 추상 클래스 사용을 고려하십시오 .
밀접하게 관련된 여러 클래스간에 코드를 공유하려고합니다.
추상 클래스를 확장하는 클래스에는 많은 공통 메소드 또는 필드가 있거나 public 이외의 액세스 수정 자 (예 : 보호 및 개인)가 필요합니다.
비 정적 또는 최종이 아닌 필드를 선언하려고합니다.
다음과 같은 경우 인터페이스 사용을 고려하십시오 .
관련없는 클래스가 인터페이스를 구현할 것으로 기대합니다. 예를 들어, 많은 관련이없는 객체가 Serializable인터페이스 를 구현할 수 있습니다.
특정 데이터 유형의 동작을 지정하려고하지만 누가 해당 동작을 구현하는지는 신경 쓰지 않습니다.
여러 유형의 상속을 활용하려고합니다.