📚 참고
자바의 정석 기초편 (객체지향개념만)

 

 

 

 

 

 

 

 

 

변수 초기화

 

  • 지역변수(lv)는 수동 초기화 해야한다. (사용 전, 꼭)
  • 멤버변수(iv, cv)는 자동 초기화된다.

 

class InitTest {
    // 인스턴스 변수
    int x;
    int y = x;
    
    void method1() {
    	// 지역 변수
    	int i;
        int j = i;		// 🚩에러 ➡ 지역변수를 초기화하지 않고 사용
    }
}

 

자동 초기화

 

수동 초기화

 

 

 

 

 

 

 

멤버변수(iv, cv) 초기화

 

1. 명시적 초기화 ( 간단 초기화, = )

 

class Car {
    int door = 4;		// 기본형 변수의 초기화
    Engine e = new Engine();	// 참조형 변수의 초기화
}

 

  • 참조형 변수에 객체 주소 값을 넣어주는 것이 초기화
  • 참조형 변수에 들어갈 수 있는 값
    1.  null (기본값)
    2.  객체주소

 

 

 

 

 

 

 

2. 초기화 블럭 ( 복잡 초기화, { } )

 

  • 인스턴스 초기화 블럭 : { } (잘 안 씀)
  • 클래스 초기화 블럭 : 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
        }
    }
}

 

 

 

 

 

 

 

3. 생성자 ( 복잡 초기화, iv 초기화 )

 

Car(String color, String gearType, int door) {	// 매개변수 있는 생성자
    	this.color = color;
        this.gearType = gearType;
        this.door = door;
}

 

 

 

 

 

 

 

정리

 

멤버변수 초기화 방법

 

  1. 자동 초기화 : 0, null
  2. 간단 초기화 : =
  3. 복잡 초기화
    • cv : static { }
    • iv : { }, 생성자

 

 

 

 

 

 

 

멤벼변수의 초기화 시점

 

  • 클래스 변수 초기화 시점 : 클래스가 처음 로딩될 때(메모리에 올라갈 때) 단 한번
  • 인스턴스 변수 초기화 시점 : 인스턴스가 생성될 때마다

 

class InitTest {
    // 명시적 초기화
    static int cv = 1;
    int iv = 1;
    
    static { cv = 2; }	// 클래스 초기화 블럭
    { iv = 2; }		// 인스턴스 초기화 블럭
    
    InitTest {		// 생성자
    	iv = 3;
    }
}

 

 

 

 

 

 

 

정리

 

초기화 순서

 

  1. cv iv
  2. 자동 간단 (=) ➡ 복잡 (초기화 블럭, 생성자)

 

 

 

 

 

 

 

 

 

 

'JAVA > 객체지향개념' 카테고리의 다른 글

클래스 간의 관계 (상속, 포함)  (0) 2021.03.15
상속 (Inheritance)  (0) 2021.03.15
생성자 this(), 참조변수 this  (0) 2021.03.13
생성자 (Constructor)  (0) 2021.03.11
오버로딩 (Overloading)  (0) 2021.03.11