2024-11-15,   조평연

본 포스팅은 초기화블럭 을 알아보는 내용입니다.

1. 초기화블럭 이란?

1) 클래스 초기화 블럭

  • 클래스 변수의 복잡한 초기화에 사용됩니다.
  • 클래스가 처음 로딩될 때 한번만 수행됩니다.
  • ex) static { }

2) 인스턴스 초기화 블럭

  • 인스턴스 변수의 복잡한 초기화에 사용됩니다.
  • 인스턴스가 생성될때 마다 수행됩니다.
  • 생성자보다 먼저 수행됩니다.
  • ex) { }


class InitBlock{

// 클래스 초기화 블럭
    static { } 

// 인스턴스 초기화 블럭
    { }
    
}

보통 위와 같은 형태를 띄고있습니다.

  • 인스턴스 변수의 초기화는 주로 생성자를 사용하기 때문에, 인스턴스 초기화 블럭은 잘 사용되지 않습니다.
  • 대신 클래스의 모든 생성자에서 공통적으로 수행되어져야 하는 코드가 있는 경우 생성자에 넣지 않고 인스턴스 초기화 블럭에 넣어 두면 코드의 중복을 줄일 수 있어서 좋습니다.

아래와 같이 코드의 중복을 줄일때 사용 할 수 있습니다.


Car(){
    System.out.println("Car 인스턴스 생성");
    color="White";
    gearType="Auto";
}
Car(String color, String gearType){
    System.out.println("Car 인스턴스 생성");
    this.color = color;
    this.gearType=gearType;
} 
--------------------------------------------
// 인스턴스 블럭
{  System.out.println("Car인스턴스 생성");  }

Car(){
   color="White";
   gearType="Auto";
}
Car(String Color, String gearType){
   this.color=color;
   this.gearType=gearType;
}

2. 초기화 블럭 실행 순서

  • 첫번째 : static { } // 클래스 초기화 블럭
  • 두번째 : 인스턴스 생성 // new ()
  • 세번째 : { } // 인스턴스 초기화 블럭
  • 네번째 : 생성자 // 클래스의 생성자
class BlockTest{
    static {                // 클래스 초기화 블럭
        System.out.println("static { }");
    }

    {                       // 인스턴스 초기화 블럭
        System.out.println("{ }");
    }

    public BlockTest(){
        System.out.println("생성자");
    }

    public static void main(String args[]){
        System.out.println("BlockTest bt = new BlockTest(); ");
        BlockTest bt = new BlockTest();

        System.out.println("BlockTset bt2 = new BlockTest();");
        BlockTest b2 = new BlockTest();
    }
}


실행결과는 아래와 같습니다.

static { }
BlockTest bt = new BlockTest();
{ }
생성자
BlockTset bt2 = new BlockTest();
{ }
생성자

3. 참고문헌

  • https://docs.oracle.com/en/java/javase/17/docs/api/index.html

업데이트: