Language/Java

[Java] 추상 클래스 vs 인터페이스

마볼링 2022. 6. 25. 21:54

추상클래스(abstract)

  • 클래스를 설계도에 비유한다면 추상 클래스는 미완성 설계도에 비유할 수 있다
  • 선언부만 작성하고 구현부는 작성하지 않은 채로 남겨 둔 것
  • abstract 지시자로 정의되며 추상메소드가 하나 이상 포함
  • abstract로 선언한 메소드는 자식 클래스에서 오버라이딩하여 반드시 구현해야 한다.
  • Example

Player 추상 클래스
player 추상 클래스를 상속받는 CDPlayer 클래스

인터페이스(interface)

  • interface 지시자로 정의하며 모든 메소드가 추상메소드로 정의
  • 일반 메서드 또는 멤버 변수를 구성원으로 가질 수 없으며, 모든 멤버 변수는 public static final이다.
  • 인터페이스는 인터페이스로부터만 상속받을 수 있으며, 클래스와 달리 다중상속을 받는 것이 가능하다.

 

추상클래스 vs 인터페이스

  • 공통점 : 추상 메서드를 강제로 구현, 인스턴스화 불가능
  • 차이점 
    • 다중 상속 여부 : 인터페이스를 구현하는 클래스는 다른 여러개 인터페이스를 함께 구현할 수 있다. 하지만 자바에서는 여러 추상클래스를 상속할 수 없다.
    • 사용의도 : 추상 클래스는 상속 관계를 타고 올라갔을 때 같은 부모 클래스를 상속하며 부모 클래스가 가진 기능들을 구현해야할 경우 사용하며, 인터페이스는 상속 관계를 타고 올라갔을 때 다른 조상 클래스를 상속하더라도, 같은 기능이 필요할 경우 사용한다.