●변수의 초기화
변수를 선언하고 처음으로 값을 저장하는 것을 '변수의 초기화'라고 한다. 변수의 초기화는 경우에 따라서 필수적이기도 하고 선택적이기도 하지만, 가능하면 선언과 동시에 적절한 값으로 초기화 하는 것이 바람직하다. 멤버변수는 초기화를 하지 않아도 자동적으로 변수의 자료형에 맞는 기본값으로 초기화가 이루어지므로 초기화하지 않고 사용해도 되지만, 지역변수는 사용하기 전에 반드시 초기화해야 한다.
class Initest {
int x; //인스턴스 변수
int y = x; //인스턴스 변수
void method() {
int i;
int j = i; // 에러. 지역변수를 초기화하지 않고 사용
위의 코드에서 x, y는 인스턴스 변수이고, i, j는 지역변수이다. 그 중 x와 i는 선언만하고 초기화를 하지 않았다. 그리고 y를 초기화 하는데 x를 사용하였고, j를 초기화 하는데 i를 사용하였다. 인스턴스 변수 x는 초기화를 해주지 않아도 자동적으로 int형의 기본값인 0으로 초기화되므로, 'int y = x;'와 같이 할 수 있다. x의 값이 0이므로 y역시 0이 저장된다.
하지만, method1()의 지역변수 i는 자동적으로 초기화되지 않으므로, 초기화 되지 않은 상태에서 변수 j를 초기화 하는데 사용될 수 없다. 컴파일하면, 에러가 발생한다.
맴버변수(클래스 변수와 인스턴스 변수)와 배열의 초기화는 선택이지만, 지역변수의 초기화는 필수이다.
※각 타입의 기본값
자료형 | 기본값 |
boolean | false |
char | '\u0000' |
byte,short,int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d 또는 0.0 |
참조형 | null |
●멤버변수의 초기화
지역변수와 달리 멤버변수는 각 타입의 기본값으로 자동 초기화 된다. 그 다음에 명시적 초기화, 초기화 블럭, 생성자의 순서로 초기화 된다. 그리고 클래스 변수(cv)가 인스턴스 변수(iv)보다 먼저 초기화 된다. 멤버 변수의 초기화에 대해서는 다음 두 가지만 기억하면 된다.
- 클래스 변수(cv) 초기화 → 인스턴스 변수(iv) 초기화
- 자동 초기화 → 명시적 초기화(간단) → 초기화 블럭, 생성자(복잡)
출처: 자바의 정석 기초편 (저자: 남궁성, 출판사: 도우출판)
'java > 객체지향' 카테고리의 다른 글
[객체지향]오버라이딩(overriding) (0) | 2021.07.13 |
---|---|
[객체지향] 상속 (0) | 2021.07.13 |
[객체지향] this()와 this (0) | 2021.07.12 |
[객체지향] 생성자 (0) | 2021.07.12 |
[객체지향] 오버로딩(overloading) (0) | 2021.07.09 |