[Java기초이론] 변수의 초기화

1 minute read

변수의 초기화

멤버변수(클래스변수와 인스턴스변수)와 배열의 촘기화는 선택적
지역변수의 초기화는 필수적이다.

각 타입의 기본값

자료형 기본값
boolean false
char ‘\u0000’
byte, short, int 0
long 0L
float 0.0f
double 0.0d 또는 0.0
참조형 변수 null

명시적 초기화(explicit initialization)

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

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

초기화 블럭(initialization block)

클래스 초기화 블럭인스턴스 초기화 블럭 두 가지 종류가 있다.

  • 클래스 초기화 블럭 클래스변수의 복잡한 초기화에 사용된다. 인스턴스 초기화 블럭 앞에 단순히 static을 덧붙이면 된다. 메모리에 처음 로딩될 때 한번만 수행된다.

  • 인스턴스 초기화 블럭 인스턴스변수의 복잡한 초기화에 사용된다. 클래스 내에 블럭{}을 만들고 그 안에 코드를 작성하기만 하면 된다. 생성자와 같이 인스턴스를 생성할 때 마다 수행된다.

멤버변수의 초기화 시기와 순서

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

클래스변수의 초기화 순서 : 기본값->명시적초기화->클래스 초기화 블럭
인스턴스변수의 초기화순서 : 기본값->명시적초기화->인스턴스 초기화 블럭->생성자
classs InitTest{
  static int cv = 1;
  int iv = 1;

  static{ cv = 2; } //클래스 초기화 블럭
  { iv = 2; } //인스턴스 초기화 블럭
  InitTest(){ //생성자
    iv = 3;
  }
}

  1. cv가 메모리(method area)에 생성되고, cv에는 int형의 기본값인 0이 cv에 저장
  2. 명시적 초기화(int cv=1)에 의해서 cv에 1이 저장
  3. 클래스 초기화 블럭(cv=2)이 수행되어 cv에는 2가 저장
  4. InitTest클래스의 인스턴스가 생성되면서 iv가 메모리(heap)에 존재 iv 역시 int형 변수이므로 기본값 0이 저장
  5. 명시적 초기화에 의해서 iv에 1이 저장
  6. 인스턴스 초기화 블럭이 수행되어 iv에 2가 저장
  7. 마지막으로 생성자가 수행되어 iv에는 3이 저장