[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
인터페이스를 구현하고, 인터페이스의 모든 메소드를 구현합니다.
결론
추상 클래스와 인터페이스는 객체 지향 프로그래밍에서 유용하게 사용되는 개념입니다. 추상 클래스는 공통적인 기능을 가진 클래스의 베이스로 동작하며, 인터페이스는 클래스 간의 계약 형식으로 사용됩니다. 이러한 개념들은 코드의 재사용성과 유연성을 높이는 데 도움을 줍니다.