프로그래밍 언어/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