인터페이스 vs 추상 클래스

박태현·2025년 4월 14일

Java

목록 보기
6/17

인터페이스


  • 추상 메서드의 집합이며, 다중 상속이 가능
  • 필드를 선언할 수는 있지만 final로만 정의할 수 있음
  • public static finalpublic abstract 제어자는 생략이 가능
interface 인터페이스이름{
    public static final 타입 상수이름 = 값;
    public abstract 타입 메서드이름(매개변수목록);
}

// --------------------------------------------------------

interface TV {
    int MAX_VOLUME = 10; // public static final 생략 가능
    int MIN_VOLUME = 10;

    void turnOn(); // public abstract 생략 가능
    void changeChannel(int channel);
}

인스턴스 생성이 불가하고 클래스에서 implements로 키워드로 구현하여 사용

자식 클래스에서 클래스 상속 ( extends )와 인터페이스 구현 ( implements )가 동시에 가능

인터페이스 다중 상속 가능 ( 클래스는 안되는데 )

  • 기능 명세만 정의 (100% 추상화)가 원칙 ( 자바 8부터 default, static 메서드 가능 )
  • 모든 변수는 자동으로 상수 ( public static final )
  • 구현 클래스는 반드시 모든 추상 메서드를 오버라이드
  • 여러 개의 인터페이스를 한 번에 구현 가능 ( 다중 상속 )

default 메서드

인터페이스 안에서 구현이 포함된 메서드

원래 인터페이스는 추상 메서드만 정의할 수 있었지만 자바 8부터 default 키워드를 사용하여 일반 메서드처럼 구현할 수 있게 됨 ( 구현 클래스에서 오버라이드 가능 )

public interface MyInterface {
    default void printHello() {
        System.out.println("Hello from interface!");
    }
}

static 메서드

인터페이스 이름으로 호출 가능한 정적 메서드

객체의 생성 없이 사용 가능하며 클래스의 static 메서드처럼 인터페이스에서도 제공 가능

public interface MyInterface {
    static void printInfo() {
        System.out.println("Static method in interface");
    }
}

=> MyInterface.printInfo(); 이렇게 호출!

추상 클래스


구체적이지 않은 추상적인 ( abstract ) 데이터를 담고 있는 클래스로 하위 클래스들의 공통점을 모아 추상화하여 만든 클래스

일반 클래스와 달리 인스턴스화가 불가능한 클래스이며, abstract 키워드를 사용하여 선언

⇒ 인스턴스화 할거면 상속시킨 자식 클래스를 인스터스화 하여 사용해야 함

  • 공통 기능의 일부를 직접 구현
  • 일반 메서드와 추상 메서드 모두 포함 가능
  • 인스턴스 변수, 생성자도 가질 수 있음
  • 상속받은 클래스에서 extends로 상속받아 사용
  • 단일 상속만 가능

인터페이스 vs 추상 클래스


구분추상 클래스인터페이스
키워드abstract classinterface
인스턴스 생성불가불가
상속 방식extends (단일 상속만 가능)implements (다중 구현 가능)
메서드 구성추상 메서드 + 일반 메서드자바 8 이후: 추상 + default + static 메서드
변수 선언인스턴스 변수, 상수 모두 가능모든 변수는 public static final 상수
다중 상속안됨여러 인터페이스 구현 가능
사용 목적공통 로직 일부 구현 + 확장기능 명세 (계약서 역할) 중심

인터페이스는 클래스가 메서드의 구현을 강제하기 위해 사용하지만, 추상 클래스는 확장과 재사용성에 초점을 두어 공통 로직을 추상화하는 부분이 인터페이스와 유사점을 가지는 것뿐임

추상 클래스는 공통된 속성과 기능을 일부 구현할 수 있고, 인터페이스는 기능의 명세만 정의하며

, 추상 클래스는 단일 상속만 가능하지만, 인터페이스는 다중 구현이 가능하다는 점이 가장 큰 차이 !!

profile
꾸준하게

0개의 댓글