Java에서 정적 블록(static block)은 클래스 로더(classloader)가 해당 클래스를 메모리에 로드하는 시점에 단 한 번 실행되는 특별한 코드 블록입니다. 정적 블록은 main() 메서드보다 먼저 호출되기 때문에, 클래스 초기화 작업이나 정적 변수의 초기값 설정에 주로 활용됩니다.
정적 블록의 실행 시점
정적 블록은 다음과 같은 특징을 가집니다.
- 클래스가 JVM에 의해 로드될 때 자동으로 실행됩니다.
- 인스턴스 생성 여부와 관계없이 딱 한 번만 수행됩니다.
main()메서드보다 항상 먼저 호출됩니다.
예제
class Demo{
static int val_1;
int val_2;
static{
val_1 = 67;
System.out.println("정적 블록이 호출되었습니다.");
}
}
public class Main{
public static void main(String args[]){
System.out.println(Demo.val_1);
}
}실행 결과
정적 블록이 호출되었습니다. 67
코드 설명
위 예제에서 Demo라는 이름의 클래스는 하나의 정적(static) 정수 변수와 하나의 일반 인스턴스 변수를 가지고 있습니다.
정적 블록 내부에서는 정적 변수 val_1에 값 67을 할당하고, 콘솔에 안내 문구를 출력합니다. 이후 Main 클래스의 main() 메서드가 실행되면, 별도의 객체 생성 없이 클래스 이름을 통해 정적 변수 Demo.val_1에 바로 접근하여 값을 출력합니다.
실행 결과를 보면 "정적 블록이 호출되었습니다."라는 문장이 가장 먼저 출력된 것을 확인할 수 있습니다. 이는 main() 메서드가 실행되기 전에 클래스 로딩 과정에서 정적 블록이 이미 수행되었음을 보여주는 것입니다.
정리
정적 블록은 드라이버 로딩, 설정 파일 읽기, 정적 상수 초기화처럼 프로그램 시작 전 반드시 한 번 수행해야 하는 작업에 유용하게 사용할 수 있습니다.