-
[Java] Static Block 실행시점과 싱글톤(Singleton)에서의 활용프로그래밍 언어/Java 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'프로그래밍 언어 > Java' 카테고리의 다른 글
[Java] multipartFile 이미지 리사이징 예제코드 (0) 2022.11.13 [Java] 클래스 로드와 클래스 초기화 (StaticInnerClass, InnerClass, MemoryLeak) (0) 2022.11.06 [Java/Kotlin] Static nested class 와 Inner Class 중 무엇을 써야할까? (0) 2022.11.06 [Java] 바이트코드 조작하기 (JavaAgent, JVM, Jacoco) (0) 2022.06.06 [Java] JVM 이 무엇인지, 어떻게 작동하는지 대충 훑어보자! (feat. 클래스로더) (1) 2022.05.29