공통점

  • 추상클래스와 인터페이스 모두 선언만 존재하고 구현부는 없다.(물론 Java 8부터는 인터페이스도 default method 구현이 가능하지만, 일반적으로 인터페이스의 메소드는 구현부가 없다.)
  • 추상클래스와 인터페이스 모두 인스턴스화가 불가능하다. 해당 추상클래스를 상속받은 서브클래스나, 해당 인터페이스를 구현한 구체적인 클래스가 인스턴스화가능하지, 자체적으로는 객체화가 불가능하다.

차이점

  • 추상클래스는 주로 공통적인 기능을 하는 객체들의 추상화다. 그와 반면 인터페이스는 구현 객체가 같은 동작을 한다는 것을 보장하기 위한 목적이다.
  • 추상클래스는 다중상속이 불가하나, 인터페이스는 다중상속이 가능하다.
  • 추상클래스는 static이나 final이 아닌 필드를 지정할 수 있고, public/proctected/private 메소드를 가질 수 있는 반면,
    인터페이스에서 모든 변수는 기본적으로 public static final이며 모든 메소드는 일반적으로 public abstract이다.

관련성이 높은 클래스간 코드를 공유하고 싶고, 추상클래스를 상속받는 클래스들이 공통적으로 가지는 메소드나 필드가 많을 경우 보통 추상클래스를 사용하고, 서로 관련성이 없는 클래스들이 같은 기능을 구현하기 위해서는 인터페이스를 사용한다.


관련 자료

  1. 자바8 에서 인터페이스와 추상클래스의 차이
  2. 자바 인터페이스와 추상클래스

oksusutea's blog

꾸준히 기록하려고 만든 블로그