본문 바로가기

Java 오류 & 개발/Java 기본 문법 & 오류

[Java 기본 문법 & 오류] Java 인터페이스(Interface)와 추상 클래스(Abstract Class) 비교

[Java] Java 인터페이스(Interface)와 추상 클래스(Abstract Class) 비교

1. 인터페이스(Interface)와 추상 클래스(Abstract Class)란?

Java에서 인터페이스(Interface)와

추상 클래스(Abstract Class) 는 객체 지향 프로그래밍에서

코드의 구조를 설계 할 때 사용됩니다.

두 개념 모두 상속(Inheritance) 을 활용하지만,

**사용 목적과 방식이 다릅니다.**

2. 인터페이스(Interface)란?

인터페이스는 **추상 메서드**(구현되지 않은 메서드)만을 포함하며,

**다중 상속이 가능**한 특징을 가집니다.

이를 통해 **클래스 간 결합도를 낮추고 유연한 코드 설계**가 가능합니다.

🔹 **인터페이스 기본 예제**


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

class Dog implements Animal {
    @Override
    public void makeSound() {
        System.out.println("멍멍!");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal dog = new Dog();
        dog.makeSound(); // 출력: 멍멍!
    }
}

✅ **특징:**

- 모든 메서드는 **자동으로 public abstract** (구현 필요)

- 다중 상속이 가능

- **변수 선언 시 자동으로 public static final** (변경 불가) 

3. 추상 클래스(Abstract Class)란?

추상 클래스는 **일반 메서드 + 추상 메서드**를 포함할 수 있으며,

**공통적인 기능을 정의하는 데 사용됩니다.

** 상속을 통해 서브 클래스에서 **기본 기능을 재사용**할 수 있습니다.

🔹 **추상 클래스 기본 예제**


abstract class Animal {
    void eat() {
        System.out.println("음식을 먹습니다.");
    }
    abstract void makeSound(); // 추상 메서드
}

class Cat extends Animal {
    @Override
    void makeSound() {
        System.out.println("야옹!");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal cat = new Cat();
        cat.eat(); // 출력: 음식을 먹습니다.
        cat.makeSound(); // 출력: 야옹!
    }
}

✅ **특징:**

- 일반 메서드(구현된 메서드) + 추상 메서드(구현 필요) 포함 가능

- 단일 상속만 가능 (extends 사용)

- **공통 기능을 제공하며, 코드 중복을 줄이는 데 유용** -

4. 인터페이스 vs 추상 클래스 비교

항목 인터페이스 (Interface) 추상 클래스 (Abstract Class)
목적 기능(행동) 정의 공통 기능 제공
메서드 추상 메서드만 포함 추상 메서드 + 일반 메서드 포함
변수 자동으로 public static final 인스턴스 변수 선언 가능
상속 다중 상속 가능 (implements) 단일 상속만 가능 (extends)

---

5. 인터페이스와 추상 클래스, 언제 사용할까?

  • ✔ **인터페이스(Interface)를 사용해야 할 때**
    • 클래스 간의 **결합도를 낮추고 유연성을 높이고 싶을 때**
    • **다중 상속이 필요할 때**
    • 메서드의 **기능(행동)을 강제하고 싶을 때**
  • ✔ **추상 클래스(Abstract Class)를 사용해야 할 때**
    • 여러 클래스에서 **공통적인 기능을 재사용하고 싶을 때**
    • **기본적인 구현을 제공하고, 일부만 구현을 강제하고 싶을 때**
    • 객체의 **상태(멤버 변수)를 포함해야 할 때**

---

📌 정리

  • ✔ **인터페이스는 "기능(행동)"을 정의하는 역할, 다중 상속 가능**
  • ✔ **추상 클래스는 "공통 기능"을 제공하며, 단일 상속만 가능**
  • ✔ **인터페이스는 메서드 선언만 포함하며, 추상 클래스는 구현된 메서드도 포함 가능**
  • ✔ **공통 기능이 필요한 경우 추상 클래스, 다형성이 중요한 경우 인터페이스 사용**

🔗 다른 Java 객체지향 프로그래밍 관련 글도 함께 확인해보세요!

Java 다형성이란? 상속과 인터페이스 활용