✅ 명시적 초기화 ✅ 생성자 ✅ 클래스, 인스턴스 초기화 블럭 ✅ 초기화 순서
변수를 선언하고 처음으로 값을 저장하는 것
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;
}
코드의 중복을 제거하는 것은 코드의 신뢰성을 높이고, 오류의 발생가능성을 줄여 준다.
즉, 코드의 재사용성을 높이고 중복을 제거하는 것, 이것이 바로 객체지향프로그래밍이 추구하는 궁극적인 목표이다.
클래스 변수
- 시점 : 클래스가 처음 로딩될 때 단 한번 초기화 된다.
- 순서 : 기본값 -> 명시적초기화 -> 클래스 초기화 블럭
클래스 변수는 항상 인스턴스 변수보다 항상 먼저 생성되고 초기화 된다.
인스턴스 변수
- 시점 : 인스턴스가 생성될 때마다 각 인스턴스별로 초기화 된다.
- 순서 : 기본값 -> 명시적초기화 -> 인스턴스 초기화 블럭 -> 생성자
class InitTest{
// 명시적 초기화
static int cv = 1;
int iv = 1;
// 클래스 초기화 블럭
static{
cv = 2;
}
// 인스턴스 초기화 블럭
{
iv = 2;
}
// 생성자
InitTest(){
iv = 3;
}
}
1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|
cv:0 | cv:1 | cv:2 | cv:2 | cv:2 | cv:2 | cv:2 |
iv:0 | iv:1 | iv:2 | iv:3 |