[기술 면접] 5. Java에서 정적 호출과 동적 호출의 차이는 무엇인가요?

Java에서 정적 호출과 동적 호출의 차이는 무엇인가요?

저번 시간에 이어, 이번엔 Java에서 정적 호출과 동적 호출의 차이가 무엇인지에 대해 알아보겠습니다. Java의 작동 방법을 이해하고 있는지 확인하기 위해 등장하는 질문인데요. 평소 봐왔던 용어일지라도 정리하지 않았으면 말로 설명하기 쉽지 않을 것으로 생각합니다.

추상클래스 / 인터페이스 / 클래스 / 객체



Q: Java에서 정적 호출과 동적 호출의 차이는 무엇인가요?

정적 호출과 동적 호출의 가장 큰 차이는 메서드 호출 시기호출되는 메서드의 결정 시기입니다. 정적 호출은 컴파일 시간에 결정되고, 동적 호출은 런타임 시간에 결정됩니다.

  • 정적 호출(Static Call)정적 호출은 컴파일러가 호출할 메서드를 결정합니다. 주로 클래스 이름을 통해 메서드를 호출하는 방식이고 컴파일 시점에 메서드가 결정되기 때문에, 호출되는 메서드의 타입컴파일러가 알고 있어야 합니다. 이러한 이유로, 정적 호출은 주로 클래스 메서드(static 메서드)에 사용됩니다.
public class StaticExample {
    public static void printMessage() {
        System.out.println("This is a static method.");
    }
    
    public static void main(String[] args) {
        printMessage(); // 정적 호출
    }
}


  • 동적 호출(Dynamic Call)런타임 시간에 결정되며, 실제로 호출될 메서드는 프로그램 실행 중에 동적으로 결정됩니다. 주로 객체를 통해 메서드를 호출하는 방식이인스턴스 메서드(instance 메서드)에 사용됩니다. 동적 호출은 다형성(polymorphism)과 관련이 깊으며, 객체의 동적인 특성에 따라 실행되는 메서드가 결정됩니다.
public interface DynamicInterface {
    void printMessage();
}

public class DynamicExample1 implements DynamicInterface {
    @Override
    public void printMessage() {
        System.out.println("This is DynamicExample1's method.");
    }
}

public class DynamicExample2 implements DynamicInterface {
    @Override
    public void printMessage() {
        System.out.println("This is DynamicExample2's method.");
    }
}

public class DynamicInvocation {
    public static void main(String[] args) {
        DynamicInterface obj1 = new DynamicExample1();
        DynamicInterface obj2 = new DynamicExample2();
        
        callPrintMessage(obj1); // 동적 호출
        callPrintMessage(obj2); // 동적 호출
    }
    
    public static void callPrintMessage(DynamicInterface obj) {
        obj.printMessage(); // 동적으로 어떤 객체의 메소드가 호출될지 결정
    }
}



마치며

오늘은 정적 호출과 동적 호출에 대해 간단하게 알아보는 시간을 가졌습니다. Java 프로그램이 실행되는 프로세스에 대해 조금씩 익혀간다고 생각하면 좋을 것 같습니다.

다음 시간에는 Java Generic에 대해 알아보겠습니다.

추상클래스 / 인터페이스 / 클래스 / 객체

Leave a Comment