반응형
변수의 초기화란?
변수를 선언하고 처음으로 값을 저장하는 것
경우에 따라서 필수적이기도 하고 선택적이기도 하지만, 가능하면 선언과 동시에 적절한 값으로 초기화 하는 것이 바람직하다.
멤버 변수는 초기화를 하지 않아도 변수의 자료형에 맞는 기본값으로 초기화 된다.
하지만 지역변수는 사용하기 전에 반드시 초기화 해야한다.
class InitTest {
int x; // 인스턴스 변수
int y = x; // 인스턴스 변수
void method() {
int i; // 지역변수
int j = i; // 에러 발생. 지역변수를 초기화 하지않고 사용
}
}
명시적 초기화(explicit initialization)
변수를 선언과 동시에 초기화하는 것을 명시적 초기화라고 한다.
여러 초기화 방법 중에서 가장 우선적으로 고려되어야 한다.
복잡한 초기화 작업이 필요할 때는 초기화 블럭(initialization block) 또는 생성자를 사용해야 한다.
class Car {
// 선언과 동시에 초기화 -> 명시적 초기화
int door = 4;
Engine e = new Engine("sport");
}
초기화 블럭(initialization block)
초기화 블럭에는 클래스 초기화 블럭과 인스턴스 초기화 블럭 두 가지 종류가 있다.
클래스 초기화 블럭
- 클래스변수의 복잡한 초기화에 사용
- 클래스가 메모리에 처음 로딩될 때 한번만 수행
인스턴스 초기화 블럭
- 인스턴스변수의 복잡한 초기화에 사용
- 생성자와 같이 인스턴스를 생성할 때마다 수행 (생성자 수행 전에 초기화 블럭 수행)
- 모든 생성자에서 공통으로 수행돼야 하는 코드를 넣는데 사용
class KiaCar { // 기아 자동차
static String brand; // 브랜드
String engine; // 엔진
String gearType; // 변속기 종류
String color; // 색상
int door; // 문의 갯수
// 클래스 초기화 블럭
static {
this.brand = "Kia";
}
// 인스턴스 초기화 블럭
{
this.engine = "normal";
this.gearType = "auto";
this.door = 4;
}
}
멤버변수의 초기화 시기와 순서
클래스 변수의 초기화 시기와 순서
- 시기 : 클래스가 처음 로딩될 때
- 순서 : 기본값 → 명시적 초기화 → 클래스 초기화 블럭
인스턴스변수의 초기화 시기와 순서
- 시기 : 인스턴스가 생성될 때마다 각 인스턴스 별로 초기화
- 순서 : 기본값 → 명시적초기화 → 인스턴스 초기화 블럭 → 생성자
반응형
'Java' 카테고리의 다른 글
오버라이딩(overriding) (0) | 2021.09.14 |
---|---|
상속(inheritance) (0) | 2021.09.14 |
재귀호출(recursive call) (0) | 2021.09.14 |
오버로딩(overloading) (0) | 2021.09.14 |
생성자(constructor) (0) | 2021.09.14 |