되자!백엔드개발자

Java(자바) - 변수의 초기화(명시적 초기화, 초기화 블럭) 본문

개발공부/JAVA

Java(자바) - 변수의 초기화(명시적 초기화, 초기화 블럭)

HyunJng 2022. 8. 10. 21:52

변수의 초기화


클래스의 멤버변수는 초기화를 하지 않아도 자동적으로 변수의 자료형에 맞는 기본값으로 초기화가 되어 초기화하지 않고 사용이 가능하지만,

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

 

 

 

명시적 초기화(explicit initialization)

변수를 선언과 동시에 초기화 하는 것

int a = 11;
Circle pizza = new Circle();

 

 

초기화 블럭(initialization block)

  • 초기화 작업에 조건문, 반복문 등 과정이 복잡하여 명시적 초기화만으로는 부족한 경우에 사용
  • 생성자에서 공통으로 사용해야하는 과정일 때 중복을 제거하기 위해 사용

 

1. 클래스 초기화 블럭

- 클래스변수(static변수)의 초기화 때 사용한다.

- static이 늘 그랬듯이 클래스가 처음 로딩될 때 단 한번만 초기화 된다.

- 클래스 변수의 초기화 순서 : 기본값 -> 명시적초기화 -> 클래스 초기화 블럭

static { 클래스 변수 초기화 }

다음과 같이 처음 한번만 초기화를 해서 사용하고 싶을 때 "클래스 초기화 블럭"을 사용한다.

class StaticBlockTest {
	static int[] arr = new int[10];

	static {
		for (int i = 0; i < arr.length; i++) {
			arr[i] = (int) (Math.random() * 10) + 1;
		}
	}
}

 

 

2. 인스턴스 초기화 블럭

- 인스턴스(객체)의 초기화 때 사용

- 객체가 생성될 때마다 인스턴스 초기화 블럭이 수행된다.

- 인스턴스변수의 초기화 순서: 기본값 -> 명시적초기화 -> 인스턴스초기화블럭 -> 생성자

{ 인스턴스 변수 초기화}

예를 들면 다음과 같이 Car생성자 안에 중복되는 초기화 작업이 있다면

class Car{
	static int count = 0;
	private int serialNo;
	private String color;
	
	
	Car(){
		count++;
		serialNo = count;
		color = "Black";
	}
	
	Car(String color){
		count++;
		serialNo = count;
		this.color = color; 
	}
}

아래와 같이 '인스턴스 초기화 블럭'으로 빼줄 수 있다.

모든 생성자에서 공통으로 수행되어야하는 내용을 인스턴스 초기화 블럭으로 적는다.

class Car{
	static int count = 0;
	private int serialNo;
	private String color;
	
	{	// 인스턴스 초기화 블럭
		count++;
		serialNo = count;
	}
	
	Car(){
		color = "Black";
	}
	
	Car(String color){
		this.color = color; 
	}
}