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

자바(Java) 비정적(non-static) 블록, 생성자보다 먼저 실행되는 순서 완벽 정리

자바에서 객체가 생성될 때마다 비정적 블록(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

결과 분석

실행 결과를 보면 객체를 한 번 생성할 때마다 세 개의 비정적 블록이 정의된 순서대로 모두 실행된 후에야 생성자의 코드가 실행되는 것을 확인할 수 있습니다. 위 예제에서는 객체를 두 번 생성했으므로, 비정적 블록과 생성자의 실행 과정이 총 두 번 반복되었습니다.

이처럼 비정적 블록은 생성자마다 중복해서 작성해야 하는 초기화 로직을 한 곳에 모아 처리할 수 있어, 객체 생성 시 공통 작업을 수행하는 데 유용하게 활용됩니다.