Interface vs Abstract Class 차이점과 사용 시기

hyunnzl·2025년 4월 5일

자바

목록 보기
4/8
post-thumbnail

기본 개념 정리

항목interfaceabstract class
목적기능(역할)의 명세를 정의공통 속성과 기능의 기본 구현 제공
키워드interfaceabstract class
다중 구현 가능 여부✅ 다중 구현 가능 (implements)❌ 단일 상속만 가능 (extends)
메서드 구현 여부Java 8 이상부터 default 메서드 가능구현된 메서드 포함 가능
필드 선언public static final(상수)만 가능인스턴스 변수 선언 가능
생성자❌ 생성자 없음✅ 생성자 있음





인터페이스 예제

  • 기능을 약속하는 역할
  • Drawable을 구현하면 무조건 draw()를 구현해야 함
interface Drawable {
    void draw();
}

class Circle implements Drawable {
    public void draw() {
        System.out.println("원을 그립니다.");
    }
}





추상 클래스 예제

  • 공통 속성(name) + 기본 동작(eat) + 추상 메서드(sound)
  • 일부 구현이 되어 있음 → 상속받아서 확장하는 형태
abstract class Animal {
    String name;

    void eat() {
        System.out.println("먹는다.");
    }

    abstract void sound(); // 하위 클래스가 반드시 구현해야 함
}

class Dog extends Animal {
    void sound() {
        System.out.println("멍멍!");
    }
}





interface, abstract class 적절한 사용시기

interface를 사용하는 경우

  • 기능을 정의할 때 (예: 그릴 수 있다, 저장할 수 있다 등)
  • 여러 클래스에 공통된 역할을 부여할 때
  • 다중 구현이 필요한 경우
  • “~할 수 있다” 형태의 기능 중심: Cloneable, Readable
  • 예: Comparable, Runnable, Serializable

✅ abstract class를 사용하는 경우

  • 공통 상태(필드)와 동작(메서드)을 공유해야 할 때
  • 기본 메서드를 제공하면서, 일부 메서드는 하위 클래스가 구현하도록 강제하고 싶을 때
  • 단일 상속이 괜찮은 구조일 때
  • “~이다” 형태의 구조 중심: Animal, Shape, Vehicle
  • 예: HttpServlet, AbstractList





정리

사용 목적interfaceabstract class
기능 중심다양한 클래스에 기능을 공통적으로 부여X
공통 속성/기본 구현X부모 클래스에서 공통 구현 제공
다중 구현 필요 여부필요하다면 interface 사용단일 상속이면 abstract class도 OK
변경 가능성기능 중심 변경 시 유연성 좋음공통 로직이 자주 바뀌지 않는 경우에 적합

0개의 댓글