[java] 자바 추상 클래스와 인터페이스의 목적에 대한 설명

추상 클래스 (Abstract Class)

추상 클래스는 하나 이상의 추상 메소드를 포함하는 클래스입니다. 추상 메소드는 구현이 없고, 서브클래스에서 반드시 구현되어야 합니다. 추상 클래스는 다른 클래스에서 상속받을 목적으로 작성되며, 객체의 일반적인 특징을 정의하는 데 사용됩니다.

주요 목적:

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

    public void sleep() {
        System.out.println("Animal is sleeping");
    }
}

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

위의 예제에서 Animal 클래스는 추상 클래스로 선언되어 있습니다. makeSound() 메소드는 구현되지 않았으므로 abstract 키워드를 사용하여 추상 메소드로 정의되었습니다. Dog 클래스는 Animal 클래스를 상속받고, 추상 메소드인 makeSound()를 구현합니다.

인터페이스 (Interface)

인터페이스는 추상 메소드, 상수 또는 default 메소드로만 구성된 일종의 추상 클래스입니다. 인터페이스는 객체의 동작을 정의하는데 사용되며, 클래스가 인터페이스를 구현하면 해당 인터페이스의 모든 메소드를 구현해야 합니다.

주요 목적:

public interface Shape {
    double calculateArea();
    double calculatePerimeter();
}

public class Circle implements Shape {
    private double radius;

    public Circle(double radius) {
        this.radius = radius;
    }

    public double calculateArea() {
        return Math.PI * Math.pow(radius, 2);
    }

    public double calculatePerimeter() {
        return 2 * Math.PI * radius;
    }
}

위의 예제에서 Shape 인터페이스는 calculateArea()calculatePerimeter()라는 두 개의 메소드를 정의합니다. Circle 클래스는 Shape 인터페이스를 구현하고, 인터페이스의 모든 메소드를 구현합니다.

결론

추상 클래스와 인터페이스는 객체 지향 프로그래밍에서 유용하게 사용되는 개념입니다. 추상 클래스는 공통적인 기능을 가진 클래스의 베이스로 동작하며, 인터페이스는 클래스 간의 계약 형식으로 사용됩니다. 이러한 개념들은 코드의 재사용성과 유연성을 높이는 데 도움을 줍니다.