프로그래밍 언어/Java

[Java] Static Block 실행시점과 싱글톤(Singleton)에서의 활용

DevPing9_ 2022. 12. 28. 14:39

 

Kotlin 의 object 키워드와 companion object 키워드가 Java 코드로 어떻게 짜여지는지 궁금하여
Decompile 해보던 중 이해할 수 없는 Static Block 을 발견하여 직접 실험해본 결과를 정리한다.

 

 

Static Block 이란? (+ Instance Block)

Static Block 은 static 키워드가 붙은 block 을 일컫는다.
Instance Block 은 static 키워드가 붙지 않은 block 을 일컫는다.
Instance Block 은 인스턴스가 초기화 될 때 실행된다.
public class StaticBlockClass {

    public static final StaticBlockClass INSTANCE; // if it's called before instance init, static block will be executed.

    public static void fun1(){ // if it's called before instance init, static block will be executed.
        System.out.println("fun1");
    }

    public void fun2(){
        System.out.println("fun2");

    }

    static { // Static Block
        StaticBlockClass var0 = new StaticBlockClass();
        INSTANCE = var0;
        System.out.println("Static Block Executed!");
    }
    
    { // Instance Block
    	System.out.println("Instance Block Executed!");
    }
}

 

Static Block 의 실행시점

Static Block 은 단 한번만 실행되며 아래의 상황에서 실행된다.

 

1. 인스턴스 초기화

 

2. Class 내 static 변수 또는 static 메소드 참조

 

3. 클래스 로딩 시점

클래스 로딩 시점에는 Static Block 이 실행되지 않는다.

 

 


 

Static Block 을 활용한 Singleton 패턴

public class StaticBlockClass {

    public static final StaticBlockClass INSTANCE;
    
    private StaticBlockClass(){}

    static { // Static Block
        StaticBlockClass var0 = new StaticBlockClass();
        INSTANCE = var0;
        System.out.println("Static Block Executed!");
    }
}

 

 

Static Block 으로 작성한 SIngleton 사용

public static void main(String[] args){
	StaticBlockClass var1 = StaticBlockClass.INSTANCE; // Static Block 이 실행되어 바로 Instance 가 생성된다.
}

 

728x90