6.5 변수의 초기화
1. 변수의 초기화
- 지역변수(lv)는 수동초기화를 해주어야 한다(사용전에 꼭 해줘야 함)
- 인스턴스 변수 클래스 변수와 같은 멤버변수는 자동초기화 된다.
class InitTest{
// 인스턴스 변수로 x 초기화 없이도 y에 대입 가능(멤버변수 cv,iv는 자동초기화가 되어있기 때문)
int x;
int y = x;
void method1(){
//지역 변수의 경우엔 수동으로 초기화해주어 사용해야 한다.
// 그 이유는 지역 변수는 메소드 내에서만 사용되고 사라지기 때문에
// 메모리 효율성을 위해서 필요할 때 초기화해서 사용하는 것이 효율적이기 때문
int i;
int j = i; //에러 발생부분 -> 지역변수 i를 초기화하지 않고 사용했기 때문이다.
}
}
멤버변수의 초기화
1. 명시적 초기화 ( = ) / 대입연산자(선언 시 초기화하는 방법)
//명시적 초기화 (=) 대입연산자 사용
class Car {
// iv(인스턴스 변수)
int door = 4; //기본형(primitive type) 변수의 초기화
Engine e = new Engine(); //참조형 (reference type) 변수의 초기화
}
※ 참조형 변수가 갖을 수 있는 값 = null 기본 값 & 객체의 주소
그러나 null 기본값은 값이 없는 것이기 때문에 참조형 변수의 선언 시에는 객체를 만들어서 만든 객체를 넣어주어야 한다. / 참조형 변수가 있는 것이지 객체가 있는 것이 아니기 때문에 우리가 원하는 것을 얻을 수 없다.
2. 초기화 블럭(복잡한 초기화에 사용/여러문장의 초기화가 필요할 때)
- 인스턴스 초기화 블럭: { }
- 클래스 초기화 블럭: static { }
3. 생성자(iv 초기화에 사용한다/ 복잡한 초기화에 사용한다.)
Car(String color, String gearType, int door){
this.color = color;
this.gearType = gearType;
this.door = door;
}
초기화의 3가지 종류
1. 자동 초기화
2. 간단 초기화
3. 복잡 초기화
4. 멤버변수의 초기화 - static { }
1. 명시적 초기화 ( = ) - 간단 초기화
2. 초기화 블럭 - { }, static { } - 복잡 초기화(cv/거의 안 씀)
3. 생성자(iv 초기화) - 복잡 초기화
class staticBlockTest {
static int[] arr = new int[10];//1. 명시적 초기화 (대입연산자로는 배열생성만 가능)
static{ //클래스 초기화 블럭 - 배열 arr를 난수로 채운다.cv-복잡 초기화
for(int i = 0; i < arr.length; i++){
arr[i] = (int)(math.random()*10)+1;
}
}
}
5.멤버변수의 초기화 시점(cv,iv)
- 클래스 변수 초기화 시점: 클래스가 처음 로딩될 때(메모리에 올라갈 때) 한번
- 인스턴스 변수 초기화 시점: 인스턴스가 생성될 때 마다(객체가 만들어질 때마다 각각의 저장공간이 초기화된다.)
초기화 순서 cv -> iv / 자동 -> 명시적(대입)/간단 -> 복잡
'Java > 객체지향' 카테고리의 다른 글
[객체지향][자바의 정석] - 7.1 상속(inheritance) (0) | 2021.11.04 |
---|---|
자바의 정석 제 6장 정리 (0) | 2021.11.04 |
[객체지향][자바의 정석] - 6.4 생성자 (0) | 2021.11.01 |
[객체지향][자바의 정석] - 3. 메서드 오버로딩 (0) | 2021.10.17 |
[객체지향][자바의 정석] - 2. 변수와 메서드 (0) | 2021.10.13 |