[JAVA] 객체지향언어 - 변수의 초기화와 초기화 블록

2023. 11. 27. 23:12프로그래밍 언어/Java

1. 멤버변수의 초기화

멤버변수는 초기화하지 않아도 자동으로 기본값으로 초기화된다. 하지만 지역변수는 사용하기 전에 반드시 초기화해야 한다. 이때 멤버변수는 지역변수와 달리 여러 가지의 초기화 방법이 있다.


2. 명시적  초기화

변수를 선언과 동시에 초기화하는 방법이다. 

class Car{
	int door = 4;
    Engine e = new Engine();
}

명시적 초기화가 간단하지만, 보다 복잡한 초기화 작업이 필요할 때는 초기화 블록 또는 생성자를 이용해야 한다.


3. 초기화 블록

초기화 블록에는 클래스 초기화 블록과 인스턴스 초기화 블록이 있다. 

 

초기화 블록을 작성하려면 인스턴스 초기화 블록은 단순히 클래스 내에 블럭{}을 만들고 그 안에 코드를 작성하면 된다. 클래스 초기화 블럭은 인스턴스 초기화 블럭 앞에 단순히 static을 덧붙이기만 하면 된다. 클래스 초기화 블럭은 클래스가 메모리에 처음 로딩될 때 한 번만 수행되며, 인스턴스 초기화 블럭은 인스턴스를 생성할 때 마다 수행된다. 그리고 생성자보다 인스턴스 초기화 블럭이 먼저 수행된다는 사실을 꼭 기억해야 한다.

 

따라서 주로 인스턴스 변수의 초기화는 주로 생성자를 사용하되, 인스턴스 초기화 블럭은 모든 생성자에서 공통적으로 수행돼야 하는 코드를 넣는 데 사용한다. 

 

Car(){
	count++;
    serialNo = count;
    this("white", 4);
}

Car(String color, int door){
	count++;
    serialNo = count;
    this.color = color;
    this.door = door;
}

예를 들어 위 예시에서 중복되는 문장들을 각 생성자마다 써주기보다는 인스턴스 초기화 블록에 넣으면 간결하게 작성할 수 있다.

{
	count++;
    serialNo = count;
}

Car(){
    this("white", 4);
}

Car(String color, int door){
    this.color = color;
    this.door = door;
}

4. 멤버변수의 초기화 순서

이제 우리가 배운 초기화 방법별로 초기화되는 순서를 알아보자.

  • 클래스변수의 초기화 시점
    클래스가 처음 로딩될 때 단 한 번 초기화된다.
  • 인스턴스변수의 초기화 시점
    인스턴스가 생성될 때마다 각 인스턴스별로 초기화가 이루어진다.

 

  • 클래스변수의 초기화 순서
    기본값 -> 명시적 초기화 -> 클래스 초기화 블록
  • 인스턴스변수의 초기화 순서
    기본값 -> 명시적 초기화 -> 인스턴스 초기화 블록 -> 생성자