초기화 블록은 자바 초기 버전부터 있던 기능으로, 객체 지향 초기화 매커니즘에서 중요한 역할을 한다.
초기화 블록은 클래스의 초기화를 담당하고, 종류에 따라 쓰임새가 다르다.
정적(static) 초기화 블록
정적 초기화 블록의 코드는 해당 클레스에 처음 접근할 때 딱 한번 실행된다.
주로 초기화 로직이 필요한 정적 변수를 초기화하는 데 사용된다. ex) 파일 불러오기
당연히 정적 초기화 블록에서는 정적 멤버가 아닌 멤버에 접근할 수 없다.
코드 예시
public class StaticInit {
private String hello = "hello";
public String getHello() {
return hello;
}
public static String STATIC_INIT = "before init";
static {
System.out.println("init 1");
}
static {
System.out.println("init 2");
STATIC_INIT = "after init";
}
}
위는 static 멤버가 있는 클래스 코드이다.
public static void main(String[] args) {
StaticInit staticInit = new StaticInit();
System.out.println(staticInit.getHello());
System.out.println(StaticInit.STATIC_INIT);
}
위는 이를 사용하는 main 함수 코드이다.
init 1
init 2
hello
after init
위는 출력 결과이다.
- 알 수 있는 점
- 정적 초기화 블록이 여러개일 때는 위에서 부터 정의한 순서로 실행된다.
- 정적 멤버에 접근할 때 뿐만 아니라 해당 클래스에 처음 접근할 때 정적 초기화 블록이 실행된다.
- 여러번 접근해도 딱 한번만 실행된다.
인스턴스 초기화 블록
인스턴스 초기화 블록의 코드는 인스턴스(객체)가 생성될 때마다 실행된다.
생성자와의 차이점
- 인스턴스 초기화 블록은 생성자보다 먼저 실행된다.
- 생성자는 파라미터에 따라 여러 종류로 오버로딩 될 수 있지만, 인스턴스 초기화 블록은 어떤 생성자로 생성이 되든 공통 로직을 수행한다.
- 생성자와 다르게 매개변수를 받을 수 없다.
'스터디 > Java' 카테고리의 다른 글
[Java 자바] '...' 가변인자(Varargs) (1) | 2024.11.21 |
---|---|
[Java 자바] 체크 예외와 언체크 예외(Checked Exception, Unchecked Exception) (0) | 2024.11.14 |
[Java 자바] finally는 반드시 실행된다. (0) | 2024.11.10 |
[Java 자바] equals()와 hashCode() 메서드 (0) | 2024.09.10 |
[Java 자바] 제네릭(generic)이란? (0) | 2024.03.19 |