본문 바로가기
Develop/Java

추상 클래스와 인터페이스

by 준팍(junpak) 2023. 4. 4.

공통점

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

 

차이점

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

 

 

사용 시기

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

 

레퍼런스

 


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

'Develop > Java' 카테고리의 다른 글

표준 예외 vs 사용자 정의 예외  (0) 2023.04.05
try-finally와 try-with-resource  (0) 2023.04.05
다형성  (0) 2023.04.04
제어자  (0) 2023.04.04
메서드 오버라이딩(Overriding)  (0) 2023.04.04