어제 오늘 내일

[Java] 추상 클래스와 인터페이스 차이 본문

IT/Java

[Java] 추상 클래스와 인터페이스 차이

hi.anna 2025. 12. 24. 07:53

 

Java에서 추상 클래스(abstract class)인터페이스(interface)는 모두 "규칙을 정의하고 자식 클래스가 구현하도록 만드는 기능"을 하지만, 목적과 사용 방식, 설계 개념에서는 분명한 차이가 있습니다.
이 글에서는 두 개념의 차이를 명확히 이해할 수 있도록 구조와 예제를 중심으로 정리합니다.

 

1. 공통점

추상 클래스와 인터페이스 모두:

  • 객체 생성 불가
  • 미완성 메서드(추상 메서드)를 포함할 수 있음
  • 자식 클래스가 반드시 구현해야 하는 기능을 정의
  • 다형성을 지원

하지만, 실제 설계 시 선택 기준은 둘의 차이점에서 결정됩니다.

 

2. 추상 클래스란?

abstract 키워드로 선언하며, 상속을 통해 공통 기능 + 확장 가능한 구조를 제공하는 클래스입니다.

특징

  • 일반 메서드 + 추상 메서드 모두 포함 가능
  • 객체 생성 불가
  • 단일 상속만 허용
  • 상태(필드)와 공통 로직을 가질 수 있음

예:

abstract class Animal {
    String name;

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

    abstract void sound();
}

 

3. 인터페이스란?

인터페이스는 클래스가 반드시 구현해야 하는 기능의 규칙을 정의하는 용도입니다.

특징

  • 모든 메서드는 기본적으로 추상 (Java 8+: default, static 메서드 허용)
  • 다중 구현 가능
  • 상태(필드)를 가질 수 없음(상수만 가능)
  • 강한 규칙 제시 역할

예:

interface Animal {
    void sound(); // 추상 메서드
}

 

4. 추상 클래스와 인터페이스의 주요 차이

비교 항목 추상 클래스 인터페이스

비교 항목 추상 클래스 인터페이스
키워드 abstract class interface
상속/구현 단일 상속만 가능 다중 구현 가능
메서드 일반 + 추상 메서드 포함 가능 기본적으로 추상, default·static 지원
필드 인스턴스 변수 선언 가능 상수(public static final)만 가능
생성자 있음(직접 호출 불가) 없음
목적 공통된 속성과 기능을 가진 “상위 클래스” 제공 구현해야 할 기능의 “규칙” 제공
사용 상황 공통 로직이 필요한 경우 서로 다른 클래스에 동일 규칙을 적용할 경우

 

5. 예제로 비교 이해하기

5-1. 추상 클래스 예

abstract class Animal {
    String name;

    void sleep() {
        System.out.println("잠을 잡니다");
    }

    abstract void sound();
}

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

설명

  • 공통 기능(sleep)은 부모가 제공
  • 구현해야 하는 기능(sound)은 자식이 처리

5-2. 인터페이스 예

interface Soundable {
    void sound();
}

class Cat implements Soundable {
    @Override
    public void sound() {
        System.out.println("야옹");
    }
}

설명

  • Cat은 Soundable이 요구하는 기능(sound)을 반드시 구현
  • Cat 클래스는 다른 여러 인터페이스도 동시에 구현 가능

 

6. 둘 중 무엇을 선택할까?

✔ 추상 클래스를 사용할 때

  • 공통 로직을 여러 자식이 공유해야 할 때
  • 공통된 상태(필드)가 필요할 때
  • 상속 구조를 명확하게 설계하고 싶을 때

✔ 인터페이스를 사용할 때

  • 서로 다른 클래스에 동일한 기능을 강제하고 싶을 때
  • 자유로운 구조가 필요할 때 (다중 구현 가능)
  • 메서드 규칙만 제시하면 충분할 때

7. 정리

  • 추상 클래스는 공통 기능을 가진 상위 클래스 역할
  • 인터페이스는 기능의 규칙을 정의하는 설계 문서 역할
  • 추상 클래스는 단일 상속, 인터페이스는 다중 구현 가능
  • 목적과 구조가 다르므로 상황에 따라 적절하게 선택해야 함

 

 

반응형
Comments