추상 클래스(Abstract Class)와 인터페이스(Interface)의 차이점

이진호·2022년 9월 4일
0

JAVA

목록 보기
8/10
post-thumbnail

추상화는 내부 구현을 숨기고 사용자에게 기능만 표시하는 것을 의미합니다. 추상 클래스(Abstract Class)와 인터페이스(Interface)는 모두 추상화를 위해 사용되는데요. 이 둘은 어떤 차이가 있을까요?

추상 클래스(Abstract Class) vs 인터페이스(Interface)

추상 클래스(Abstract Class) vs 인터페이스(Interface)

  • 메소드 타입: 인터페이스는 추상 메소드만 가질 수 있습니다. 이와 달리 추상 클래스는 추상 메소드와 추상적이지 않은 메소드 모두 가질 수 있습니다. 하지만 Java8 부터 인터페이스도 디폴트 메소드와 정적 메소드를 가질 수 있게 되었으며, Java9 부터는 private 메소드도 가질 수 있게 되었습니다.

    자바8 디폴트 메소드(Default Methods)

  • 변수 타입: 인터페이스에 오직 정적(static)이며 초기화시 변경불가능(final)한 변수들만 가질 수 있습니다. 반면에 추상 클래스는 static, non-static, final, non-final 변수들 모두 소유 가능합니다.

  • 구현 제공: 추상 클래스는 인터페이스의 구현체가 될 수 있습니다. 반면에 인터페이스는 추상 클래스의 구현체가 될 수 없습니다.

  • 구현 방법: 인터페이스는 구현체 하나에 여러개의 인터페이스를 가질 수 있습니다. 추상 클래스는 구현체 하나의 하나의 추상 클래스만 가질 수 있습니다.

  • 다중 상속: 인터페이스는 다중 상속을 지원합니다. 반면에 추상 클래스는 다중 상속을 지원하지 않습니다.

  • 멤버 변수 접근성: 인터페이스의 멤버 변수들은 기본적으로 public 입니다. 반면에 추상 클래스는 private, protected 등과 같은 멤버 변수를 가질 수 있습니다.

추상 클래스 사용을 고려해야 하는 경우

  • 필요에 의해서 일반 메소드와 덧붙여 추상화 기능을 더하고자 하는 경우.
  • 상속에 대한 계층 구조가 명확히 표현되는 경우.

인터페이스 사용을 고려해야 하는 경우

  • 디자인을 구성하는 요소가 자주 바뀌는 경우.
  • 다중 상속(구현)이 필요한 경우

정리

사용 의도

  • 추상클래스는 IS - A "~이다".
  • 인터페이스는 HAS - A "~을 할 수 있는".

공통된 기능 사용 여부

  • 공통된 기능이 필요하다면 추상클래스를 이용해서 일반 메서드를 작성하여 자식 클래스에서 사용.
  • 다른 추상클래스를 상속하는데 공통된 기능이 필요한 경우 인터페이스로 작성.

정리

출처

0개의 댓글