[java] 자바 추상 클래스와 인터페이스의 다중 상속

자바는 다른 언어들과 달리 클래스의 다중 상속을 지원하지 않습니다. 그러나 자바에서는 다중 상속과 비슷한 기능을 구현하기 위해 추상 클래스와 인터페이스를 제공합니다. 이 포스트에서는 자바에서 추상 클래스와 인터페이스를 사용하여 다중 상속과 유사한 기능을 구현하는 방법을 살펴보겠습니다.

추상 클래스

추상 클래스는 일반적인 클래스와 달리 객체를 직접 생성할 수 없으며, 상속을 통해 서브 클래스에서 구현되어야 합니다. 추상 클래스는 abstract 키워드를 사용하여 선언하며, 추상 메서드를 포함할 수 있습니다.

public abstract class Animal {
    public abstract void makeSound();
}

위의 코드는 Animal이라는 추상 클래스를 정의한 예시입니다. Animal 클래스는 추상 메서드인 makeSound()를 선언하고 있습니다. 이 메서드는 서브 클래스에서 구현되어야 합니다.

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

Cat 클래스는 Animal 클래스를 상속하고 있으며, makeSound() 메서드를 오버라이딩하여 구현하고 있습니다. Cat 클래스는 Animal 클래스의 추상 메서드를 구현함으로써 다중 상속과 유사한 기능을 구현할 수 있습니다.

인터페이스

인터페이스는 추상 클래스와 마찬가지로 객체를 직접 생성할 수 없으며, 구현되어야 하는 메서드를 선언하는 역할을 합니다. 인터페이스는 interface 키워드를 사용하여 선언하며, 추상 메서드와 상수만을 포함할 수 있습니다.

public interface Shape {
    double getArea();
    double getPerimeter();
}

위의 코드는 Shape라는 인터페이스를 정의한 예시입니다. Shape 인터페이스는 getArea()getPerimeter()라는 추상 메서드를 선언하고 있습니다. 이러한 메서드는 인터페이스를 구현하는 클래스에서 반드시 구현되어야 합니다.

public class Rectangle implements Shape {
    private double width;
    private double height;

    public Rectangle(double width, double height) {
        this.width = width;
        this.height = height;
    }

    @Override
    public double getArea() {
        return width * height;
    }

    @Override
    public double getPerimeter() {
        return 2 * (width + height);
    }
}

Rectangle 클래스는 Shape 인터페이스를 구현하고 있으며, getArea()getPerimeter() 메서드를 구현하고 있습니다. Shape 인터페이스를 구현함으로써 다중 상속과 유사한 기능을 구현할 수 있습니다.

결론

자바에서는 클래스의 다중 상속을 지원하지 않지만, 추상 클래스와 인터페이스를 활용하여 다중 상속과 유사한 기능을 구현할 수 있습니다. 추상 클래스는 서브 클래스에서 추상 메서드를 구현함으로써 다중 상속과 유사한 기능을 구현하고, 인터페이스는 클래스가 구현해야 하는 메서드를 정의함으로써 다중 상속과 유사한 기능을 구현할 수 있습니다. 프로그래밍할 때 이러한 개념을 적절히 활용하여 유연하고 재사용 가능한 코드를 작성할 수 있습니다.

참고자료: