[Java] interface vs abstract class 차이

우노구나·2025년 6월 30일

interface

interface Meter {
    void start();
    int stop(int distance);
}
class Car implements Meter {
    public void start() {
        System.out.println("시작!");
    }

    public int stop(int distance) {
        return distance / 2;
    }
}

순수한 설계의 틀을 제공한다.



abstract class

abstract class Machine {
    abstract void powerOn();

    void check() {
        System.out.println("시스템 점검");
    }
}
class Computer extends Machine {
    void powerOn() {
        System.out.println("컴퓨터 켜짐");
    }
}

공통 기능 일부와 설계도 제공한다.



요약

구분interfaceabstract class
상속(구현) 방식implements로 구현extends로 상속
다중 상속 가능✔️ 여러 개 동시 구현 가능✖️ 단일 상속만 가능
메서드 구성기본적으로 public abstract 메서드만 선언
(Java 8부터 default, static 가능)
abstract 메서드 + 일반 메서드 섞어 사용 가능
필드 구성상수(public static final)만 선언 가능일반 변수, 상수 모두 선언 가능
객체 생성불가능직접 생성 불가, 자식이 상속해야 사용 가능
주 사용 목적설계 틀 제공(순수 규격)공통 기능 일부 제공 + 설계 제공

Java 클래스는 다이아몬드 상속 문제(모호성) 방지 목적 때문에 다중상속이 금지 된다
하지만 interface는 다중 상속을 허용한다.



꼬리질문

다이아몬드 상속 문제란?
interface와 abstract class의 메모리 할당
abstract class가 어떻게 사용되는지

profile
기술 블로그

0개의 댓글