1. 변수를 초기화하는 방법
변수를 초기화 하는 방법에는 생성자 외에도 명시적 초기화, 초기화 블럭이 있다.
2. 명시적 초기화(explicit initalization)
변수를 선언과 동시에 초기화 하는 것을 명시적 초기화라고 한다.
명시적 초기화는 간단하고 명료하지만 복잡한 초기화에는 적합하지 않다.
Class Car {
int door = 4; // 기본형 변수의 초기화
Engine e = new Engine(); // 참조형 변수의 초기화
}
3. 초기화 블럭(initalization block)
초기화 블럭에는 '클래스 초기화 블럭'과 '인스턴스 초기화 블럭'이 있다.
클래스 초기화 블럭 : 클래스변수의 복잡한 초기화에 사용된다.
인스턴스 초기화 블럭 : 인스턴스변수의 복잡한 초기화에 사용된다.
인스턴스 초기화 블럭은 클래스 내에 블럭 {}을 만들고 그 안에 코드를 작성하기만 하면 된다.
클래스 초기화 블럭은 인스턴스 초기화 블럭 앞에 static을 덧붙이면 된다.
Class InitBlock {
static { /* 클래스 초기화 블럭 */ }
{ /* 인스턴스 초기화 블럭 */ }
} // 초기화 블럭 내에서는 메서드처럼 조건문, 반복문, 예외처리구문이 가능하다.
클래스 초기화 블럭은 클래스가 메모리에 처음 로딩될 때 한번만 수행되며, 인스턴스 초기화 블럭은 생성자와 같이 인스턴스를 생성할 때 마다 수행된다. 참고로, 생성자 보다 인스턴스 초기화 블럭이 먼저 수행된다.
초기화 블럭은 모든 생성자에서 공통으로 수행되어야 하는 코드에 활용하면 좋다.
// 인스턴스 초기화 블럭
{
count++;
serialNo = count;
}
// 생성자
Car() {
color = "White";
gearType = "Auto";
}
Car(String color, String gearType) {
this.color = color;
this.gearType = gearType;
}
- 클래스 초기화 블럭 사용 예시
참고문헌 : 남궁성(2016), Java의 정석, 도우출판