변수의 초기화
변수를 선언하고 처음으로 값을 저장하는 것
•
가능한 변수 선언과 동시에 적절한 값으로 초기화 하는 것이 바람직
•
멤버 변수 → 초기화 없어도 자동으로 변수의 자료형에 맞는 기본값으로 초기화됨.
•
지역 변수 → 사용 전 반드시 초기화 필요
class InitTest {
int x; // 인스턴스 변수. 자동으로 기본값 0으로 초기화
int y = x; // 인스턴스 변수. 자동 초기화된 상태이므로 x 사용 가능
void method1() {
int i; // 지역 변수
int j = i; // 에러. 지역변수를 초기화하지 않고 사용
}
}
Java
멤버 변수의 초기화 방법
1.
명시적 초기화
2.
생성자
3.
초기화 블럭
명시적 초기화 (Explicit Initialization)
변수를 선언과 동시에 초기화 하는 것
class Car {
int door = 4; // 기본형 변수의 초기화
Engine e = new Engine(); // 참조형 변수의 초기화
}
Java
초기화 블럭 (Initialization Block)
class InitBlock {
static { /* 클래스 초기화 블럭 */ }
{ /* 인스턴스 초기화 블럭 */ }
// ...
}
Java
•
클래스 초기화 블럭 : 클래스 변수의 복잡한 초기화에 사용
◦
인스턴스 초기화 블럭 앞에 static 덧붙임
◦
클래스가 메모리에 처음 로딩될 때 한번만 수행
•
인스턴스 초기화 블럭 : 인스턴스 변수의 복잡한 초기화에 사용
◦
클래스 내에 블럭 { }을 만들고 내용 작성
◦
인스턴스를 생성할 때마다 수행
◦
생성자보다 초기화 블럭이 먼저 수행
◦
모든 생성자에서 공통으로 수행돼야 하는 코드를 넣는데 사용
(인스턴스 변수 초기화는 생성자로)
// 인스턴스 초기화 블럭. 모든 생성자에 공통으로 들어가야 할 문장들
{
count++;
serialNo = count;
}
Car() {
color = "White";
gearType = "Auto";
}
Car(String color, String gearType) {
this.color = color;
this.gearType = gearType;
}
Java
코드의 재사용성을 높이고, 중복 제거하기 위해! → 객체 지향 프로그래밍의 핵심
BlockTest.java
BlockTest2.java
멤버변수의 초기화 시기와 순서
•
클래스 변수 : 클래스가 처음 로딩될 때 단 한번
◦
초기화 순서 : 기본값 → 명시적 초기화 → 클래스 초기화 블럭
•
인스턴스 변수 : 인스턴스가 생성될 때마다
◦
초기화 순서 : 기본값 → 명시적 초기화 → 인스턴스 초기화 블럭 → 생성자
class InitTest {
// 명시적 초기화
static int cv = 1;
int iv = 1;
static { cv = 2; } // 클래스 초기화 블럭
{ iv =2; } // 인스턴스 초기화 블럭
InitTest() { // 생성자
iv = 3;
}
}
Java
ProductTest.java
DocumentTest.java