☕️Java:: 변수의 초기화
변수의 초기화란?
-> 변수를 선언하고 처음으로 값을 저장하는 것
-> 필수적/선택적 케이스 모두 존재. 가능하면 선언과 동시에 초기화하는것이 바람직
멤버변수(클/인 변수)의 초기화
-> 멤버변수는 초기화 안해도 자동적으로 변수의 자료형에 맞는 기본값으로 초기화가 이루어지므로 굳이 안해도 됨
멤버변수의 초기화 방법
1) 명시적 초기화 explicit initialization
2) 생성자 constructor
3) 초기화 블럭 initialization block
- 인스턴스 초기화 블럭: 인스턴스변수 초기화에 사용
- 클래스 초기화 블럭: 클래스변수 초기화에 사용
지역변수의 초기화
-> 지역변수는 사용 전에 반드시 초기화해야 함
class Initialization {
int x; //iv
int y = x; //iv
void method() {
int i; //lv
int j = i; //error. 지역변수이므로 초기화 필요
}
}
명시적 초기화 explicit initialization
-> 변수를 선언과 동시에 초기화하는 것
-> 가장 기본적, 간단한 방법이므로 초기화 방법들 중 가장 우선적으로 고려하기
-> 얘로 초기화하기 복잡한 경우엔 초기화 블럭 initialization block 또는 생성자 사용하기
초기화 블럭 initialization block
-> 이 안에는 메서드 안과 같이 조건문, 반복문, 예외처리구문 등 자유롭게 사용 가능하므로, 초기화 작업이 복잡하여 명시적 초기화만으로 부족한 경우 사용하면 됨.
-> 종류에는 두 가지가 있음. 클래스 초기화 블럭과 인스턴스 초기화 블럭임.
- 클래스 초기화 블럭: 클래스변수의 복잡한 초기화에 사용. 인스턴스 초기화 블럭 앞에 static 붙여줌. 클래스가 메모리에 처음 로딩될 때 한 번만 수행됨.
- 인스턴스 초기화 블럭: 인스턴스변수의 복잡한 초기화에 사용. 클래스 내에 {} 블럭을 만들고 그 안에 코딩. 생성자처럼 인스턴스가 생성될 때마다 수행됨. 인스턴스변수의 초기화는 주로 생성자를 통해 이루어지며, 초기화블럭은 모든 생성자에서 공통적으로 수행되어야 하는 코드를 넣는데 사용된다.
Car() {
count++; //중
serialNo = count; //복
color = "Red";
gearType = "Auto";
}
Car (String color, String gearType) {
count++; //중
serialNo = count; //복
this.color = color;
this.gearType = gearType;
}
위의 코드에는 클래스의 모든 생성자에 공통으로 수행되어야 하는 중복 부분이 존재.
아래처럼 인스턴스 블럭 이용해 간결화 가능.
{
count++; //인스턴스
serialNo = count; //초기화 블럭
}
Car() {
color = "red";
gearType = "Auto";
}
Car(String color, String gearType) {
this.color = color;
this.gearType = gearType;
}
이렇게 코드 중복 제거해서
1) 코드의 신뢰성 높이고
2) 에러 발생 가능성 줄일 수 있음
=> 즉, 재사용성을 높이고 중복을 제거할 수 있음
==> 즉, OOP의 궁극적인 목적 달성에 가까워질 수 있음
class InitializationExample {
static { //클래스 초기화
System.out.println("static { }"); //블럭
}
{ //인스턴스 초기화
System.out.println("{ }"); //블럭
}
public InitializationExample() {
System.out.printLn("Constructor")l
}
public static void main(String args[]) {
System.out.println("InitializationExample ie1 = new InitializationExample(); ");
InitializationExample ie1 = new InitializationExample();
System.out.println("InitializationExample ie2 = new InitializationExample(); ")
InitializationExample ie2 = new InitializationExample();
}
}
출처:: 자바의 정석 3rd edition 1권 OOP