본문 바로가기
IT/JAVA

Java에서 인터페이스와 추상 클래스 비교(Interface, Abstract Class)

by ohukohoh 2025. 2. 24.
728x90
반응형

Java에서는 **객체 지향 프로그래밍(OOP)**의 중요한 개념 중 하나로 **추상화(Abstraction)**가 있습니다. 추상화는 구현을 숨기고 중요한 기능만 제공하는 개념으로, Java에서는 **추상 클래스(Abstract Class)와 인터페이스(Interface)**를 통해 이를 실현합니다. 두 개념은 유사하지만 사용 목적과 기능이 다르므로 비교하여 이해하는 것이 중요합니다.


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

인터페이스의 개념

  • 인터페이스는 추상 메서드(구현 없이 선언만 있는 메서드)와 상수만 포함하는 설계도입니다.
  • 다중 상속이 가능하여 여러 클래스에서 같은 인터페이스를 구현할 수 있습니다.
  • interface 키워드를 사용하여 선언합니다.

인터페이스 사용 예제

interface Animal {
    void makeSound(); // 추상 메서드 (구현 없음)
}

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

public class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog();
        myDog.makeSound();
    }
}

출력 결과:

멍멍!

🔹 인터페이스는 implements 키워드를 사용하여 구현합니다. 🔹 모든 메서드는 기본적으로 public abstract이며, 반드시 구현해야 합니다.


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

추상 클래스의 개념

  • 추상 클래스는 추상 메서드(구현이 없는 메서드)와 일반 메서드(구현이 있는 메서드)를 포함할 수 있는 클래스입니다.
  • 단일 상속만 가능합니다.
  • abstract 키워드를 사용하여 선언합니다.

추상 클래스 사용 예제

abstract class Animal {
    abstract void makeSound(); // 추상 메서드
    
    void sleep() {
        System.out.println("잠자는 중...");
    }
}

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

public class Main {
    public static void main(String[] args) {
        Animal myCat = new Cat();
        myCat.makeSound();
        myCat.sleep();
    }
}

출력 결과:

야옹!
잠자는 중...

🔹 추상 클래스는 extends 키워드를 사용하여 상속합니다. 🔹 추상 클래스는 일반 메서드도 가질 수 있으며, abstract 메서드는 반드시 오버라이딩해야 합니다.


3. 인터페이스와 추상 클래스 비교

비교 항목인터페이스 (Interface)추상 클래스 (Abstract Class)

상속 관계 다중 상속 가능 (implements) 단일 상속만 가능 (extends)
메서드 포함 여부 모든 메서드는 추상 메서드(자바 8 이후 default 메서드 가능) 추상 메서드 + 일반 메서드 포함 가능
변수 포함 여부 staticfinal(상수)만 가능 인스턴스 변수 선언 가능
생성자 생성자 없음 생성자 사용 가능
사용 목적 특정 기능을 구현하도록 강제 (규격 제공) 기본적인 동작을 정의하고 하위 클래스에서 확장

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

인터페이스를 사용할 때:

  • 여러 개의 부모 인터페이스를 상속받아야 할 때 (다중 상속이 필요할 때)
  • 클래스 간 공통된 메서드의 구현을 강제해야 할 때
  • 객체의 동작을 정의하고 싶을 때 (예: Comparable, Runnable)

추상 클래스를 사용할 때:

  • 일부 공통 메서드의 구현을 제공하면서, 특정 메서드는 하위 클래스에서 구현하도록 강제할 때
  • 상속을 통해 클래스를 확장하고 공통 로직을 공유해야 할 때
  • 객체의 속성과 동작을 정의하는 베이스 클래스로 사용하고 싶을 때

결론

Java에서 인터페이스와 추상 클래스는 각각 다른 목적을 가지고 있습니다.

  • 인터페이스는 특정 동작을 정의하고 이를 여러 클래스에서 구현하도록 강제합니다.
  • 추상 클래스는 공통 기능을 제공하면서 일부 메서드는 하위 클래스에서 구현하도록 유도합니다.

적절한 상황에서 인터페이스와 추상 클래스를 활용하면 유지보수성이 뛰어나고 확장성이 높은 객체지향 프로그램을 개발할 수 있습니다. 🚀

728x90
반응형