1. 변수의 초기화란?
변수를 선언하고 처음으로 값을 저장하는 것을 '변수의 초기화'라고 한다. 변수의 초기화는 경우에 따라 필수적이기도, 선택이기도 하지만 가능하면 선언과 동시에 적절한 값으로 초기화하는 것이 바람직하다.
자료형 | 기본값 |
boolean | false |
char | '\u0000' |
byte, short, int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d 또는 0.0 |
참조형 변수 | null |
2. 멤버변수와 지역변수 초기화
멤버변수(클래스변수와 인스턴스변수)와 배열의 초기화는 선택적이지만, 지역변수의 초기화는 필수적이다. → 멤버변수는 기본값으로 초기화를 해주기 때문!
class InitTest {
int x; // 인스턴스변수
int y = x; // 인스턴스변수
void method1() {
int i; // 지역변수
int j = i; // 에러. 지역변수를 초기화하지 않고 사용
}
}
위의 코드에서 x, y는 인스턴스 변수이고, i, j는 지역변수이다.
인스턴스 변수 x는 초기화를 해주지 않아도 자동적으로 int형의 기본값인 0으로 초기화가 된다.
그러나, 지역변수 i는 자동적으로 초기화되지 않으므로 컴파일 에러가 발생한다.
아래는 변수의 초기화에 대한 추가적인 예이다.
선언예 | 설 명 |
int i = 10; int j = 10; |
int형 변수 i를 선언하고 10으로 초기화 한다. int형 변수 j를 선언하고 10으로 초기화 한다. |
int i = 10, j = 10; | 같은 타입의 변수는 콤마(,)를 사용해서 함께 선언하거나 초기화 할 수 있다. |
int i = 10, long j = 0; | 에러. 타입이 다른 변수는 함께 선언하거나 초기화할 수 없다. |
int i = 10; int j = i; |
변수 i에 저장된 값으로 변수 j를 초기화 한다. 변수 j는 i의 값인 10으로 초기화 된다. |
int j = i; int i = 10; |
에러. 변수 i가 선언되기 전에 i를 사용할 수 없다. |
3. 멤버변수의 초기화 방법
멤버변수의 초기화는 지역변수와 달리 여러 가지 방법이 있다.
1. 명시적 초기화(explicit initialization)
2. 생성자(constructor)
3. 초기화 블럭(initialization block)
- 인스턴스 초기화 블럭 : 인스턴스변수를 초기화 하는데 사용
- 클래스 초기화 블럭 : 클래스변수를 초기화 하는데 사용
참고문헌 : 남궁성(2016), Java의 정석, 도우출판