자바에서는 추상 클래스와 인터페이스를 사용하여 추상화를 구현할 수 있습니다. 하지만 이 두 가지 개념을 사용하는 방법과 메서드를 호출하는 방법은 약간 다릅니다. 이번 글에서는 자바 추상 클래스와 인터페이스에서 메서드를 호출하는 방법을 알아보겠습니다.
추상 클래스에서 메서드 호출하기
추상 클래스는 일반 클래스와 마찬가지로 인스턴스화할 수 없지만, 하위 클래스에서 상속받아 구현하고 메서드를 호출할 수 있습니다. 추상 클래스 안에서 정의된 추상 메서드는 하위 클래스에서 반드시 구현되어야 하며, 그렇지 않으면 컴파일 에러가 발생합니다.
아래는 추상 클래스와 하위 클래스의 예시입니다.
public abstract class Animal {
public abstract void makeSound();
}
public class Dog extends Animal {
public void makeSound() {
System.out.println("멍멍!");
}
}
Animal
클래스는 추상 메서드 makeSound()
를 정의하고 있습니다. Dog
클래스는 Animal
클래스를 상속받고 makeSound()
메서드를 구현합니다. 이제 Dog
클래스의 인스턴스를 생성하고 makeSound()
메서드를 호출해보겠습니다.
public static void main(String[] args) {
Dog dog = new Dog();
dog.makeSound(); // 출력: 멍멍!
}
인터페이스에서 메서드 호출하기
인터페이스는 추상 메서드의 집합으로, 클래스가 인터페이스를 구현한다는 의미로 사용됩니다. 인터페이스를 구현한 클래스는 인터페이스에서 선언된 모든 메서드를 반드시 구현해야 합니다.
아래는 인터페이스와 구현 클래스의 예시입니다.
public interface Vehicle {
void start();
void accelerate();
void stop();
}
public class Car implements Vehicle {
public void start() {
System.out.println("자동차 시동을 켭니다.");
}
public void accelerate() {
System.out.println("자동차를 가속합니다.");
}
public void stop() {
System.out.println("자동차를 정지시킵니다.");
}
}
Vehicle
인터페이스는 start()
, accelerate()
, stop()
메서드를 선언하고 있습니다. Car
클래스는 Vehicle
인터페이스를 구현하고 인터페이스에서 선언한 메서드를 모두 구현합니다. 이제 Car
클래스의 인스턴스를 생성하고 인터페이스의 메서드를 호출해보겠습니다.
public static void main(String[] args) {
Car car = new Car();
car.start(); // 출력: 자동차 시동을 켭니다.
car.accelerate(); // 출력: 자동차를 가속합니다.
car.stop(); // 출력: 자동차를 정지시킵니다.
}
마무리
자바에서 추상 클래스와 인터페이스는 다른 방식으로 동작하지만, 메서드 호출은 클래스에서 상속받거나 인터페이스를 구현한 객체를 생성하여 호출할 수 있습니다. 추상 클래스는 하위 클래스에서 메서드를 구현하고 호출하며, 인터페이스는 구현 클래스에서 메서드를 구현하고 호출합니다.
추상 클래스와 인터페이스는 다형성과 모듈화를 가능하게 해주는 중요한 개념입니다. 이를 적절히 활용하여 유연하고 확장 가능한 자바 프로그램을 개발할 수 있습니다.
더 자세한 내용은 아래 참고자료를 참고해주세요.