관리 메뉴

너와 나의 스토리

[Java] Static field의 복잡한 초기화 작업을 위한 정적 블록(Static block) 본문

Programming Language/Java

[Java] Static field의 복잡한 초기화 작업을 위한 정적 블록(Static block)

노는게제일좋아! 2021. 4. 7. 22:15
반응형

Static Block

  • Static field는 보통 선언과 동시에 초기값을 준다.
    • 예: static double pi = 3.14159;
  • 하지만 초기값으로 주려는 값이 복잡한 계산이 필요한 경우가 있다.
    • 예: info
public class Television {
    static String company = "Samsung";
    static String model = "LCD";
    static String info = company + '-' + model;
}
  • 이런 경우 static block에서 초기화를 진행할 수 있다.
    • Static block은 클래스가 메모리로 로딩될 때 자동적으로 실행된다.
public class Television {
    static String company = "Samsung";
    static String model = "LCD";
    static String info;
    
    static {
    	info = company + '-' + model;
    }
}
  • Static block에는 static field와 method만 초기화할 수 있다.
    • 인스턴스 필드&메서드를 초기화하려고 시도하면 컴파일 에러가 발생한다.
public class ClassName{
    int field1;
    void method1(){};
    static int field2;
    static void method2(){};

    static {
        // field1 = 10  -> compile error
        // method1();   -> compile error
        field2 = 10;
        method2();
    }
}
  • Static method와 block에서 인스턴스 멤버를 사용하고 싶다면 다음과 같이 객체를 먼저 생성하고 참조 변수로 접근해야 한다.
public class ClassName{
    int field1;
    void method1(){};
    static int field2;
    static void method2(){};

    static {
        field2 = 10;
        method2();
    }

    static void method3(){
        ClassName obj = new ClassName();
        obj.field1 = 10;
        obj.method1();
    }
    
}
  • main() 메서드도 static method이므로 동일한 규칙이 적용된다.
public class ClassName{
    int field1;
    void method1(){};
    static int field2;
    static void method2(){};

    static {
        field2 = 10;
        method2();
    }

    public static void main(String[] args){
        ClassName obj = new ClassName();
        obj.field1 = 10;
        obj.method1();
    }
}

 

 

 

 

 

출처:

- [이것이 자바다]

반응형
Comments