객체지향 프로그래밍(OOP)

[Java] 인터페이스와 추상 클래스 차이점 완벽 정리: 개념, 특징과 예제 코드 비교

CodeCaine Explorer 2024. 10. 30. 19:10
728x90
반응형
SMALL

인터페이스와 추상 클래스는 객체지향 프로그래밍에서 공통적인 기능을 정의하는 데 사용됩니다. 하지만 둘 사이에는 중요한 차이점이 있습니다.

1. 기본 개념

  • 추상 클래스(Abstract Class): 특정 공통 기능을 가진 클래스이지만, 객체로 생성할 수 없습니다. 추상 클래스는 다른 클래스들이 상속받아서 구현을 완성하도록 설계됩니다.
  • 인터페이스(Interface): 클래스가 특정 기능을 제공하도록 강제하는 계약서와 같습니다. 인터페이스에 정의된 메서드는 반드시 구현되어야 하며, 다중 상속이 가능합니다.

쉽게 말하면, 추상 클래스는 공통의 기능을 가진 기본 클래스로, 필요한 메서드 일부는 이미 구현되어 있을 수 있습니다. 반면, 인터페이스는 클래스가 어떤 특정 기능을 제공해야 한다는 약속입니다.

2. 차이점

차이점 추상 클래스 인터페이스
상속 관계 단일 상속만 가능 다중 상속 가능
메서드 구현 구현된 메서드 포함 가능 모든 메서드는 기본적으로 추상 메서드
변수 인스턴스 변수와 final 변수 모두 가짐 public static final 변수만 가짐
상속 키워드 extends 키워드 사용 implements 키워드 사용
목적 공통 기능 제공, 기본적인 기능 구현 가능 특정 기능 제공 강제, 다형성 보장

추상 클래스 예시

추상 클래스는 특정 클래스들이 공통으로 가져야 하는 기능을 정의할 때 유용합니다. 예를 들어, 동물(Animal) 클래스는 모두 공통된 "소리내기" 기능을 가질 수 있지만, 구체적인 소리는 각 동물마다 다를 수 있습니다.

abstract class Animal {
    // 일반 메서드
    void breathe() {
        System.out.println("The animal is breathing.");
    }

    // 추상 메서드
    abstract void makeSound();
}

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

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

위 코드에서 Animal은 추상 클래스입니다. makeSound()라는 추상 메서드를 선언했으며, 각각의 동물인 DogCat 클래스는 이 메서드를 자신만의 방식으로 구현합니다. 이렇게 하면 모든 동물이 소리를 내는 기능은 가지지만, 구체적인 소리 방식은 각 동물마다 다르게 정의할 수 있습니다.

인터페이스 예시

인터페이스는 클래스들이 특정한 기능을 반드시 구현하도록 강제합니다. 예를 들어, 모든 전자 기기는 전원을 켜고 끌 수 있어야 한다고 가정해 보겠습니다. 이럴 때 인터페이스를 사용할 수 있습니다.

interface PowerControl {
    void turnOn();
    void turnOff();
}

class Television implements PowerControl {
    @Override
    public void turnOn() {
        System.out.println("The TV is on.");
    }

    @Override
    public void turnOff() {
        System.out.println("The TV is off.");
    }
}

class Radio implements PowerControl {
    @Override
    public void turnOn() {
        System.out.println("The radio is on.");
    }

    @Override
    public void turnOff() {
        System.out.println("The radio is off.");
    }
}

위 코드에서 PowerControl 인터페이스는 turnOn()turnOff() 메서드를 정의하고 있습니다. TelevisionRadio 클래스는 이 인터페이스를 구현하며, 각각의 전원이 켜지고 꺼지는 방식은 다를 수 있습니다. 하지만 모든 전자 기기가 이 두 가지 메서드를 갖추고 있으므로 전원을 켜고 끌 수 있는 기능은 일관성 있게 유지됩니다.

간단 정리

  1. 추상 클래스는 "공통적인 기본 기능"을 제공하는 클래스이고, 구현된 메서드를 포함할 수 있습니다.
  2. 인터페이스는 "특정 기능을 제공하겠다"는 약속을 의미하며, 모든 메서드를 반드시 구현하도록 강제합니다.
  3. 추상 클래스는 단일 상속만 가능하지만, 인터페이스는 여러 개를 동시에 구현할 수 있습니다.
반응형
SMALL