[java] 자바 추상 클래스와 인터페이스의 메서드 호출 방법

자바에서는 추상 클래스와 인터페이스를 사용하여 추상화를 구현할 수 있습니다. 하지만 이 두 가지 개념을 사용하는 방법과 메서드를 호출하는 방법은 약간 다릅니다. 이번 글에서는 자바 추상 클래스와 인터페이스에서 메서드를 호출하는 방법을 알아보겠습니다.

추상 클래스에서 메서드 호출하기

추상 클래스는 일반 클래스와 마찬가지로 인스턴스화할 수 없지만, 하위 클래스에서 상속받아 구현하고 메서드를 호출할 수 있습니다. 추상 클래스 안에서 정의된 추상 메서드는 하위 클래스에서 반드시 구현되어야 하며, 그렇지 않으면 컴파일 에러가 발생합니다.

아래는 추상 클래스와 하위 클래스의 예시입니다.

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(); // 출력: 자동차를 정지시킵니다.
}

마무리

자바에서 추상 클래스와 인터페이스는 다른 방식으로 동작하지만, 메서드 호출은 클래스에서 상속받거나 인터페이스를 구현한 객체를 생성하여 호출할 수 있습니다. 추상 클래스는 하위 클래스에서 메서드를 구현하고 호출하며, 인터페이스는 구현 클래스에서 메서드를 구현하고 호출합니다.

추상 클래스와 인터페이스는 다형성과 모듈화를 가능하게 해주는 중요한 개념입니다. 이를 적절히 활용하여 유연하고 확장 가능한 자바 프로그램을 개발할 수 있습니다.

더 자세한 내용은 아래 참고자료를 참고해주세요.

참고자료