본문 바로가기

Java/자바의 정석 3판

객체지향 프로그래밍(1) - 변수의 초기화

 

int i = 0;

변수의 초기화

변수를 선언하고, 처음으로 값을 저장하는 것

 

변수의 선언 위치에 따라서, 규칙이 상이하다.

멤버 변수(클래스 변수와 인스턴스 변수)의 경우, 변수 선언만 해도 자동적으로 해당 변수 타입의 기본형 값이 저장된다.

지역 변수의 경우 자동으로 초기화되지 않으므로, 변수 값을 초기화해주지 않을 경우, 컴파일 에러가 발생한다.

 

 

멤버 변수의 초기화 방법

1. 명시적 초기화

2. 생성자

3. 초기화 블럭

 

- 명시적 초기화

int door = 4; // 기본형 변수의 초기화
Engine e = new Engine(); // 참조형 변수의 초기화

변수를 선언과 동시에 초기화 하는 것. 가장 기본적이면서 간단한 초기화 방법이다.

 

 

- 생성자

class Car{
	String color;
	String gearType;
	int door;

    Car(){
    	this("white","auto","4");
	}
    Car(String color){
    	this(color,"auto",4);
    }
    Car(String color, String gearType, int door){
    	this.color = color;
        this.gearType = gearType;
        this.door = door;
    }
}

인스턴스를 생성할 때 호출되는 생성자를 이용하여 해당 인스턴스의 멤버 변수를 초기화 해준다.

 

- 초기화 블럭

class Car {
	static{
		//클래스 초기화 블럭
	}
	{ // 인스턴스 초기화 블럭
		count++;
		serialNo = count;
	} // 인스턴스 초기화 블럭

	Car(){
		//count++;
		//serialNo = count;
		color = "white";
		gearType = "Auto"
	}
    
	Car(String color, String gearType){
		//count++;
		//SerialNo = count;
		this.color = color;
		this.gearType = gearType;
	}
}

초기화 작업이 복잡하거나, 중복되는 내용이 있을 경우 초기화 블럭을 사용한다.

 

클래스 초기화 블럭은 클래스가 메모리에 처음 로딩될 때 한번만 수행되며,

인스턴스 초기화 블럭은 인스턴스를 생성할 때 마다 수행된다.

 

생성자보다 인스턴스 초기화 블럭이 먼저 수행된다는 사실에 주의해야한다.

 

 

마지막으로 클래스, 인스턴스 변수에 대한  초기화 순서는 다음과 같다.

 

- 클래스 변수 (클래스 로딩 시 단 한번 초기화)

   기본값 > 명시적 초기화 > 클래스 초기화 블럭 

 

- 인스턴스 변수 (인스턴스 생성 시 각 인스턴스 별로 초기화)

   기본값 > 명시적 초기화 > 인스턴스 초기화 블럭 > 생성자