지금을 사는 사람

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

Java

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

지금회 2023. 12. 27. 14:32
728x90

1. Abstract Class(추상 클래스)와 Interface(인터페이스)의 공통점:

두 가지 모두 Java에서 다형성을 구현하는데 사용되는 객체 지향의 중요한 개념들입니다. 그러나 추상 클래스와 인터페이스는 몇 가지 차이점을 가지고 있습니다.

2. Abstract Class의 특징:

  • 일반적인 메서드와 추상 메서드:
    • 추상 클래스는 일반적인 메서드와 추상 메서드를 모두 가질 수 있습니다. 추상 메서드는 하위 클래스에서 반드시 구현되어야 합니다.
public abstract class Animal {
    public void eat() {
        // 구현 내용
    }

    public abstract void makeSound(); // 추상 메서드
}
  • 다중 상속 불가:
    • 추상 클래스는 단일 상속만을 지원하며, 클래스는 여러 추상 클래스를 상속받을 수 없습니다.
  • 생성자 존재:
    • 추상 클래스는 생성자를 가질 수 있습니다. 이를 통해 공통적인 초기화 로직을 처리할 수 있습니다.

3. Interface의 특징:

  • 모든 메서드가 추상 메서드:
    • 인터페이스는 모든 메서드가 추상 메서드입니다. Java 8부터는 default 및 static 메서드를 인터페이스에 추가할 수 있게 되었습니다.
public interface Animal {
    void eat(); // 추상 메서드

    default void run() {
        // 구현 내용
    }
}
  • 다중 상속 가능:
    • 인터페이스는 다중 상속을 지원하며, 여러 인터페이스를 동시에 구현할 수 있습니다.
  • 생성자 미존재:
    • Java 8 이전에는 생성자가 없었지만, Java 8부터는 인터페이스에 default 메서드를 사용하여 메서드의 기본 구현을 제공할 수 있게 되었습니다.

4. 언제 Abstract Class를 사용하고 언제 Interface를 사용할까?

  • 공통 코드가 필요한 경우:
    • 공통 코드를 가지는 메서드나 필드가 있는 경우 추상 클래스를 활용할 수 있습니다.
  • 다중 상속이 필요한 경우:
    • 다중 상속이 필요하거나 이미 다른 클래스를 상속받고 있는 경우, 인터페이스를 사용하는 것이 좋습니다.
  • API의 일관성을 유지하고 싶은 경우:
    • 여러 클래스가 같은 인터페이스를 구현할 때, API 일관성을 유지하기 위해 인터페이스를 사용하는 것이 좋습니다.
  • Abstract Class 는 확장을 목적으로 Interface 는 공통된 기능을 강제하는 목적으로 사용한다.
    • Abstract Class : 자동차 Class를 상속받는 SUV, SportsCar
    • Interface : withdraw와 deposit 기능을 필수로 구현해야하는 은행 Interface

5. 결론:

추상 클래스와 인터페이스는 다형성을 구현하기 위한 두 가지 주요 도구로, 각각의 특징을 고려하여 프로젝트의 목적과 구조에 따라 적절한 선택을 해야 합니다. 언제 어떤 것을 사용할지를 이해하면 유지보수 가능하고 확장 가능한 코드를 작성하는 데 도움이 될 것입니다.

 

728x90