Java

객체(Object) - 변수의 초기화

제주니어 2022. 8. 24. 22:00

변수의 초기화

1. 변수의 초기화

멤버변수(클래스 변수 & 인스턴스 변수)는 초기화 하지 않아도

자동적으로 변수의 자료형에 맞는 기본값으로 초기화가 이루어진다.

지역변수는 사용하기 전에 반드시 초기화해야 한다. (수동초기화)

class Practice {
		int x;          // 인스턴스 변수
		int y = x;      // 인스턴스 변수
		
		void method1(){
			int i;        // 지역변수
			int j = i;    // error, 지역변수를 초기화하지 않고 사용.
	}
}

 

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

2. 명시적 초기화(explicit initialization)

  • 간단 초기화
  • 변수를 선언과 동시에 초기화하는 것
class Practice {
		int weight = 55;               // 기본형 (primitive type) 변수의 초기화
		Practice1 p = new Practice1(); // 참조형 (reference type) 변수의 초기화
}

3. 초기화 블럭(initialization block)

  • 복잡 초기화

클래스 초기화 블럭

클래스 변수의 복잡한 초기화에 사용된다. → static { }
클래스가 메모리에 처음 로딩될 때 한번만 수행된다.

 

static {
    age = 20;

// static 블록에서는 필드를 초기화할 수 없다.
// name = "박현진";
}

 

인스턴스 초기화 블럭

인스턴스 변수의 복잡한 초기화에 사용된다. → { }
생성자와 같이 인스턴스를 생성할 때 마다 수행된다.
생성자 보다 인스턴스 초기화 블럭이 먼저 수행된다.

 

{
    phoneName = "아이폰13";
    price = 1190000;

//	인스턴스 블록에서는 클래스 변수도 초기화할 수 있다.
//	brand = "삼성"; // static은 클래스로 접근해야 한다. 
}

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

초기화 시점

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

초기화 순서

  • 클래스 변수 : 기본값 → 명시적초기화 → 클래스 초기화 블럭
  • 인스턴스 변수 : 기본값 → 명시적초기화 → 인스턴스 초기화 블럭 → 생성자

생성자를 이용한 초기화

public String getName() {
    return name;
}

public static int getAge() {
    return age;
}

public String getPhoneName() {
    return phoneName;
}

public int getPrice() {
    return price;
}

public static String getBrand() {
    return brand;
}