본문 바로가기
JAVA

13. 멤버변수의 초기화

by seongju.lee 2022. 9. 25.

멤버변수를 초기화 하는 방법은 크게 3가지로 나뉜다.

  1. 명시적 초기화
    • 간단 초기화의 경우 사용.
    • 기본형 변수의 초기화
      • int door = 4;
    • 참조형 변수의 초기화
      • Engine e = new Engine();
  2. 초기화 블럭
    • 주로 복잡한 클래스 변수 초기화 하는데 사용
    • 인스턴스변수 초기화 블럭: { }. -> 사용 잘 x
    • 클랙스변수 초기화 블럭 : static { } 
  3. 생성자
    • 복잡한 초기화를 하는 경우 사용
    • 인스턴스 변수를 초기화 하는데 사용된다.

public class VariableInitalize {

	public static void main(String[] args) {
		
		// static 변수(클래스변수)의 초기화 테스트
		System.out.println(Arrays.toString(StaticBlockTest.arr));

		// instance 변수의 초기화 테스트
		ConstructorTest ct = new ConstructorTest();
		System.out.println(ct.instanceVariable);
		
		
	}

}

// 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;
		}
		
		
	}
	
}

// instance 변수의 복잡한 초기화 : 생성자
class ConstructorTest {
	
	int instanceVariable = 0; // 기본형 변수의 명시적 초기화 -> 사실 멤버변수는 명시적 초기화를 안해도 자동초기화 된다.
	
	ConstructorTest() {
		this.instanceVariable = 100;
	}
}

 

위 코드를 통해 쉽게 설명하자면,

  • 우선은 간단하게 초기화할 수 있는 내용은 명시적 초기화를 사용하면 쉽다.
  • 이 외에, 복잡한 초기화를 진행해야 할 때는,
    • 클래스 변수(static)를 초기화 할 때는 static { }
    • 인스턴스 변수를 초기화 할 때는 생성자

를 사용하면 된다.

 

 

(참고)

초기화 순서 클래스변수 -> 인스턴스변수

초기화 되는 시점은 당연히,

클래스가 메모리에 올라갈 때, 클래스변수가 먼저 초기화가 진행된다. (자동 초기화(기본값) -> static 명시적 초기화 -> static {})순으로!
다음으로, 객체가 생성될 때마다 인스턴스 변수가 초기화된다.(자동 초기화(기본값) -> 명시적 초기화 -> 생성자 )

'JAVA' 카테고리의 다른 글

15. 오버라이딩  (0) 2022.10.02
14. 상속과 포함  (0) 2022.10.02
12. this()와 this  (0) 2022.09.24
12. 생성자, 기본 생성자  (0) 2022.09.24
11. static 메서드와 instance 메서드  (0) 2022.09.20