Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

main 메소드 없이 자바 프로그램을 실행할 수 있을까?

네, static 블록(정적 초기화 블록)을 사용하면 main 메소드 없이도 자바 프로그램을 실행할 수 있습니다.

자바에서 static 블록은 클래스가 JVM의 클래스 로더(ClassLoader)에 의해 메모리에 로딩되는 시점에 단 한 번만 실행되는 코드 묶음입니다. 흔히 '정적 초기화 블록(static initialization block)'이라고 부르며, 정적 초기화 블록은 스택 메모리에 직접 적재됩니다.

static 블록은 클래스가 로딩될 때 가장 먼저 실행되기 때문에, 이 안에서 프로그램을 종료하는 System.exit(0)을 호출하면 JVM이 main 메소드를 찾기 전에 프로그램이 끝나게 됩니다. 이 원리를 이용하면 main 메소드 없이도 출력 결과를 얻을 수 있습니다.

예제 코드

class StaticInitializationBlock {
    static {
        System.out.println("class without a main method");
        System.exit(0);
    }
}

위 예제처럼 static 블록 안에서 문자열을 출력하고 즉시 프로그램을 종료하면, main 메소드 없이도 자바 프로그램을 실행할 수 있습니다.

다만 주의할 점이 있습니다. 이 방식은 Java 1.6 버전까지만 동작합니다. Java 7부터는 JVM이 클래스를 초기화하기 전에 main 메소드의 존재 여부를 먼저 검사하기 때문에, main 메소드가 없으면 컴파일은 되더라도 실행 시 오류가 발생합니다. 따라서 최신 자바 환경에서는 반드시 main 메소드를 포함해야 합니다.

실행 결과 (Java 6 이하)

class without a main method.