class Test {
static {
System.out.println(1);
}
{
System.out.println(2);
}
Test() {
System.out.println(3);
}
public static void main(String[] args) {
Test test1 = new Test();
Test test2 = new Test();
}
}
위의 코드를 실행했을 때, 실행 결과가 어떻게 될까?
정답은 다음과 같다.
필자는 Java 문법만큼은 잘 알고있다고 생각했었는데, 이 코드를 보고 생각이 바뀌었다. 실행 결과가 어떻게 될지 예상조차 못했기 때문이다.
그래서 오늘은 초기화 블럭
에 대해 내용을 간단하게 정리해보는 시간을 가져보겠다.
인스턴스 초기화 블럭
과 클래스 초기화 블럭
이 존재한다.{}
만을 사용하여 정의할 수 있다.class Test {
{ // 인스턴스 초기화 블럭
System.out.println(2);
}
Test() {
System.out.println(3);
}
public static void main(String[] args) {
Test test1 = new Test();
Test test2 = new Test();
}
}
static
키워드와 중괄호{}
를 사용하여 정의할 수 있다.class Test {
static { // 클래스 초기화 블럭
System.out.println(2);
}
Test() {
System.out.println(3);
}
public static void main(String[] args) {
Test test1 = new Test();
Test test2 = new Test();
}
}
초기화 블럭이라는 키워드조차 처음 들어봤다. 예제 코드를 봤을 때, 키워드를 모르니 구글링할 때도 뭐라고 검색해야 할지 감도 안 잡혔다.
초기화 블럭의 존재와 이유를 알게 되니 납득이 되었다. 하나의 클래스에 여러 개의 생성자가 충분히 존재할 수 있으며, 만약 공통 코드가 존재한다면 이를 하나로 뽑아내서 관리할 수 있는 아주 좋은 역할을 해주기 때문이다.
이번에 새로운 Java 문법을 알게 돼서 신기했고, 어느 정도 Java를 해왔기 때문에 잘 알고 있다고 자칭했던 자신이 부끄러워졌다. 자만하지 말고, 항상 배우는 자세를 임하도록 하자.