[java] 자바 추상 클래스와 인터페이스의 추상화 수준 차이

자바에서는 추상 클래스와 인터페이스라는 두 가지 방법을 통해 추상화를 할 수 있습니다. 그러나 이 두 가지는 추상화 수준에 있어서 차이가 있습니다.

1. 추상 클래스

추상 클래스는 일반적으로 추상 메소드 또는 추상 변수를 포함하는 클래스입니다. 추상 메소드는 구현되지 않은 메소드로, 하위 클래스에서 반드시 구현되어야 합니다. 추상 변수는 하위 클래스에서만 사용 가능한 변수입니다. 추상 클래스는 abstract 키워드를 사용하여 선언됩니다.

public abstract class AbstractClass {
    public abstract void abstractMethod();

    public void concreteMethod() {
        // 구현된 메소드
    }
}

추상 클래스는 일부 기능을 상속하고 확장하기 위해 사용될 수 있습니다. 추상 클래스를 상속받은 클래스는 추상 메소드를 구현해야 하며, 추상 메소드 외에도 추상 클래스에 구현된 일반 메소드를 사용할 수 있습니다.

2. 인터페이스

인터페이스는 추상 메소드와 상수만을 가질 수 있는 참조 유형입니다. 모든 메소드는 기본적으로 추상 메소드로 선언되며, 메소드의 구현은 인터페이스를 구현한 클래스에서 이루어집니다. 인터페이스는 interface 키워드를 사용하여 선언됩니다.

public interface Interface {
    public static final int CONSTANT = 10;

    void abstractMethod();

    default void defaultMethod() {
        // 기본 구현된 메소드
    }
}

인터페이스는 다중 상속을 지원하며, 여러 개의 인터페이스를 구현하는 것이 가능합니다. 이를 통해 클래스가 여러 개의 계약(interface)을 갖게 됩니다.

3. 추상화 수준 차이

추상 클래스는 상태와 동작을 포함한 일부 구현을 가지고 있습니다. 따라서 추상 클래스는 일종의 부분적인 구현을 제공하고, 상속을 통해 완전한 구현을 제공하는 것을 목표로 합니다.

반면에 인터페이스는 오직 추상 메소드와 상수만을 가지고 있습니다. 인터페이스는 특정한 동작의 규약(컨트랙트)을 정의합니다. 클래스가 특정 인터페이스를 구현한다는 것은 해당 인터페이스의 규칙에 따라 동작한다는 것을 의미합니다.

따라서, 추상 클래스는 보다 구체적인 기능을 제공하고 확장 가능한 클래스를 구현하기 위해 사용되고, 인터페이스는 다양한 객체들 간의 상호 작용을 위해 사용됩니다.

4. 정리

따라서, 개발자는 어떤 추상화 수준이 필요한지에 따라 추상 클래스 또는 인터페이스를 선택하여 사용해야 합니다.

참고 자료