[java] 자바 추상 클래스와 인터페이스의 추상 메서드와 일반 메서드의 차이
자바에서 추상 클래스와 인터페이스는 객체 지향 프로그래밍에서 중요한 개념입니다. 둘 다 추상 메서드를 포함할 수 있지만, 추상 클래스와 인터페이스 간에는 추상 메서드와 일반 메서드의 차이가 있습니다.
추상 클래스의 추상 메서드
- 추상 클래스는
abstract
키워드로 정의됩니다. - 추상 클래스는 일반 메서드와 추상 메서드를 모두 가질 수 있습니다.
- 추상 메서드는 구현이 없는 메서드로, 서브클래스에서 반드시 재정의해야 합니다.
- 추상 클래스의 추상 메서드는 모든 서브클래스에서 동일한 시그니처(메서드 이름, 매개변수 타입 및 반환 타입)를 가져야 합니다.
- 추상 클래스의 추상 메서드는 서브클래스에서 다양한 동작을 구현할 때 사용됩니다.
예시 코드:
public abstract class Animal {
public abstract void makeSound();
public void eat() {
System.out.println("Animal is eating.");
}
public void sleep() {
System.out.println("Animal is sleeping.");
}
}
public class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("Meow");
}
}
인터페이스의 추상 메서드
- 인터페이스는
interface
키워드로 정의됩니다. - 인터페이스는 오직 추상 메서드만을 가질 수 있습니다.
- 추상 메서드는 구현이 없으며, 모든 메서드는 기본적으로
public
으로 선언됩니다. - 클래스가 인터페이스를 구현할 때, 모든 추상 메서드를 재정의해야 합니다.
- 인터페이스는 개념적으로 다중 상속을 지원하기 위해 사용될 수 있습니다.
예시 코드:
public interface Vehicle {
void start();
void stop();
}
public class Car implements Vehicle {
@Override
public void start() {
System.out.println("Car started.");
}
@Override
public void stop() {
System.out.println("Car stopped.");
}
}
추상 클래스와 인터페이스를 선택하는 기준
- 추상 클래스는 추상 메서드 외에도 필드, 일반 메서드, 생성자 등을 가질 수 있습니다. 상태와 동작을 함께 표현할 때 유용합니다.
- 인터페이스는 다중 상속을 지원하고, 여러 클래스에게 동일한 동작을 강제하거나 일반적인 동작을 제공할 때 사용됩니다.
참고 자료: