PHpullh
학습 라이브러리/Java/추상 클래스 vs 인터페이스

JAVA · 객체지향

추상 클래스 vs 인터페이스

추상 클래스와 인터페이스의 차이점과 각각의 적절한 사용 시나리오를 비교합니다.

객체지향중급abstractinterface추상클래스extends

핵심 설명

추상 클래스와 인터페이스의 차이점과 각각의 적절한 사용 시나리오를 비교합니다.

Java code

// 추상 클래스 — 상태(필드) + 구현 공유
abstract class Animal {
    protected String name; // 상태 보유 가능

    Animal(String name) { this.name = name; }

    abstract void speak(); // 추상 메서드

    void sleep() { // 구현 메서드
        System.out.println(name + " 잠을 잡니다");
    }
}

// 인터페이스 — 행동 계약
interface Flyable {
    void fly(); // 추상 메서드

    default void land() { // 기본 구현 (Java 8+)
        System.out.println("착륙합니다");
    }

    static Flyable create(String type) { // 정적 메서드
        return () -> System.out.println(type + " 날아갑니다");
    }
}

// 다중 인터페이스 구현 가능
class Bird extends Animal implements Flyable {
    Bird(String name) { super(name); }

    @Override void speak() { System.out.println("짹짹"); }
    @Override public void fly() { System.out.println(name + " 날아갑니다"); }
}

class Main {
    public static void main(String[] args) {
        Bird b = new Bird("참새");
        b.speak(); b.fly(); b.land(); b.sleep();
    }
}

학습 팁

상태와 구현 공유가 필요하면 추상 클래스, 행동 계약만 필요하면 인터페이스를 선택하세요. Java 8+에서는 인터페이스도 default 메서드를 가집니다.

주의할 점

클래스는 하나만 상속할 수 있지만 인터페이스는 여러 개 구현할 수 있습니다. 다중 상속이 필요하면 인터페이스를 활용하세요.

자주 묻는 질문

추상 클래스 vs 인터페이스란 무엇인가요?

추상 클래스와 인터페이스의 차이점과 각각의 적절한 사용 시나리오를 비교합니다.

추상 클래스 vs 인터페이스 학습 시 주의할 점은 무엇인가요?

클래스는 하나만 상속할 수 있지만 인터페이스는 여러 개 구현할 수 있습니다. 다중 상속이 필요하면 인터페이스를 활용하세요.