자바에서 객체가 생성될 때마다 비정적 블록(non-static block)이 생성자(constructor)가 실행되기 전에 항상 먼저 호출됩니다.
비정적 블록(Non-Static Block)이란?
- 비정적 블록은 별도의 선언 형식(프로토타입) 없이 클래스 레벨에 정의하는 블록입니다.
- 비정적 블록이 필요한 이유는 어떤 생성자가 호출되든 관계없이 객체가 생성될 때마다 공통적인 로직을 반드시 실행해야 하기 때문입니다.
- 비정적 블록은 개발자가 직접 호출하지 않아도, JVM이 자동으로 호출하며 모든 객체 생성 시점에 실행됩니다.
- 하나의 클래스 안에서 비정적 블록은 원하는 만큼 여러 개 정의할 수 있습니다.
- 여러 개의 비정적 블록이 있을 경우 작성된 순서대로 위에서부터 차례로 실행됩니다.
예제 코드
public class NonStaticBlockTest {
{
System.out.println("First Non-Static Block"); // 첫 번째 비정적 블록
}
{
System.out.println("Second Non-Static Block"); // 두 번째 비정적 블록
}
{
System.out.println("Third Non-Static Block"); // 세 번째 비정적 블록
}
NonStaticBlockTest() {
System.out.println("Execution of a Constructor"); // 생성자
}
public static void main(String args[]) {
NonStaticBlockTest nsbt1 = new NonStaticBlockTest();
NonStaticBlockTest nsbt2 = new NonStaticBlockTest();
}
}실행 결과
First Non-Static Block Second Non-Static Block Third Non-Static Block Execution of a Constructor First Non-Static Block Second Non-Static Block Third Non-Static Block Execution of a Constructor
결과 분석
실행 결과를 보면 객체를 한 번 생성할 때마다 세 개의 비정적 블록이 정의된 순서대로 모두 실행된 후에야 생성자의 코드가 실행되는 것을 확인할 수 있습니다. 위 예제에서는 객체를 두 번 생성했으므로, 비정적 블록과 생성자의 실행 과정이 총 두 번 반복되었습니다.
이처럼 비정적 블록은 생성자마다 중복해서 작성해야 하는 초기화 로직을 한 곳에 모아 처리할 수 있어, 객체 생성 시 공통 작업을 수행하는 데 유용하게 활용됩니다.