변수의 초기화
- 변수를 선언하고 처음으로 값을 저장하는 것
- 가능하면 선언과 동시에 적절한 값으로 초기화하는 것이 바람직
멤버변수, 배열 (초기화 선택)
따로 초기화를 하지 않아도 자동적으로 변수의 자료형에 맞는 기본값으로 초기화된다.
지역변수 (초기화 필수)
사용하기 전 반드시 초기화해야 한다.
멤버변수의 초기화 방법
1. 명시적 초기화
2. 생성자
3. 초기화 블록
- 인스턴스 초기화 블록
- 클래스 초기화 블록
명시적 초기화
변수를 선언과 동시에 초기화
class Car {
int door = 4; // 기본형 변수의 초기화
Engine e = new Engine(); // 참조형 변수의 초기화
}
생성자
초기화 블록
클래스 초기화 블록
클래스 변수의 복잡한 초기화에 사용
인스턴스 초기화 블록
인스턴스 변수의 복잡한 초기화에 사용
class InitBlock {
static { /* 클래스 초기화 블럭 */ }
{ /* 인스턴스 초기화 블럭 */ }
// ...
}
초기화 블록 내에는 조건문, 반복문, 예외처리구문 등을 자유롭게 사용할 수 있어 복잡한 초기화 작업이 필요한 경우 사용한다.
클래스 초기화 블록은 클래스가 메모리에 처음 로딩될 때 한 번만 수행된다.
인스턴스 초기화 블록은 생성자와 같이 인스턴스를 생성할 때마다 수행된다.
생성자 보다 인스턴스 초기화 블록이 먼저 수행된다.
Car() {
count++;
serialNo = count;
color = "White";
gearType = "Auto";
}
Car(String color, String gearType) {
count++;
serialNo = count;
this.color = color;
this.gearType = gearType;
}
count++; serialNo = count; 이 부분은 중복코드이다. 이를 인스턴스 블록에 넣어주면 코드가 간결해진다.
{
count++;
serialNo = count;
}
Car() {
color = "White";
gearType = "Auto";
}
Car(String color, String gearType) {
this.color = color;
this.gearType = gearType;
}
멤버변수의 초기화 시기와 순서
클래스 변수의 초기화 시점
클래스가 처음 로딩될 때 단 한번 초기화
인스턴스 변수의 초기화 시점
인스턴스가 생성될 때마다 각 인스턴스별로 초기화가 이루어진다.
클래스 변수의 초기화 순서
기본값 → 명시적 초기화 → 클래스 초기화 블록
인스턴스 변수의 초기화 순서
기본값 → 명시적 초기화 → 인스턴스 초기화 블록 → 생성자
'JAVA' 카테고리의 다른 글
[OOP] 오버라이딩(overriding) (0) | 2023.03.06 |
---|---|
[OOP] 상속(inheritance) (0) | 2023.03.06 |
[OOP] 생성자(Constructor) (0) | 2023.03.03 |
[OOP] 오버로딩(overloading) (0) | 2023.03.03 |
[OOP] 클래스 메서드와 인스턴스 메서드 (0) | 2023.03.01 |