Develop/Java

추상 클래스와 인터페이스

준팍(junpak) 2023. 4. 4. 15:30

공통점

  • 자바에서 타입을 정의하는 방법이다.
  • 추상 메서드를 가지며, 반드시 구현해야한다.
    • 추상클래스 : 추상메서드를 가지는 클래스
    • 인터페이스 : 모든 메서드가 public abstract이며,  해당 제어자는 생략가능하다. *
  • 스스로 생성자를 통해서 인스턴스를 생성할 수 없다.
    • 추상 클래스 : 상속을 통해 자식 클래스의 인스턴스를 생성한다.
    • 인터페이스 : 인터페이스를 구현한 클래스를 통해 인스턴스를 생성한다.

 

차이점

추상클래스 인터페이스
객체이므로, 상태와 행위를 가진다.
(= 추상메서드 외에 필드와 생성자, 메서드를 가질 수 있다.)
명세이므로, 행위만을 정의한다.
(= 추상 메서드와 상수만을 가진다.)*
Object 클래스를 상속하므로,
equals와 hashcode를 재정의할 수 있다.
Object 클래스를 상속하지 않으므로,
equals와 hashcode를 재정의할 수 없다.
다중 상속이 불가능하다 다중 구현이 가능하다.

 

 

사용 시기

  • 추상 클래스
    • 타입 계층 구조를 구현해야 하는 경우
    • 공통으로 가지는 메서드와 필드가 많아 중복 멤버를 통합할 때
    • 인스턴스의 상태 변경이 필요할 때
  • 인터페이스
    • 서로 관련이 없는 클래스들을 묶어 주고 싶을 때
    • 다중 구현을 통한 추상화 설계를 해야할 때
    • 명세를 정의했으나, 어떤 클래스가 구체적인 동작을 구현하는 지 알 필요가 없는 경우

 

레퍼런스

 


* 단, jdk 1.8 이후 static 메서드와 default 메서드, jdk1.9 이후 private 메서드를 가질 수 있다.
(참고로 default 메서드의 default는 접근 제어자가 아닌 키워드다)