변수를 선언하고 처음으로 값을 저장하는 것을 변수의 초기화라고 한다.

변수의 초기화는 경우에 따라서는 필수적이기도 하고 선택적이기도 하지만, 가능하면 선언과 동시에 적절한 값으로 초기화 하는 것이 바람직하다.

멤버변수는 초기화를 하지 않아도 자동적으로 변수의 자료향에 맞는 기본값으로 초기화가 이루어지므로 초기화를 하지 않고 사용해도 되지만 지역변수는 사용하기 전에 반드시 초기화를 해야 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class InitTest {
int x;   <-- 멤버변수
int y = x; <--멤버변수 인스턴스 변수라고 함
 
void method1() {
int i; //지역변수 (메소드안에 존재하는 것은 지역변수) 초기화를 해야 한다.
int j = i; // 컴파일 에러발생 : 지역변수를 초기화하지 않고 사용했음.
}
}
 
//변수의 초기화
//변수를 선언하고 처음으로 값을 저장하는 것을 변수의 초기화라고 한다.
//변수의 초기화는 경우에 따라서는 필수적이기도 하고 선택적이기도 한다.
//가능하면 선언과 동시에 적절한 값으로 초기화 하는것이 바람직히다.
//멤버변수는 초기화를 하지 않아도, 자동적으로 변수의 자료형에 맞는 기본값으로 초기화가 이루어지므로
//초기화를 하지 않고 사용해도 되지만 지역변수는 사용하기 전에 반드시 초기화를 해야 한다.
 
 
cs

 

멤버변수의 초기화 방법- 클래스의 안에 들어 있는것을 멤버변수라고 한다.

 

★ 멤버변수의 초기화하는 방법

 

1. 명시적 초기화

2. 생성자

3. 초기화 블럭

인스턴스 초기화 블럭: 인스턴스변수를 초기화하는데 사용

클래스 초기화 블럭: 클래스변수를 초기화 하는데 사용

 

★ 명시적 초기화

변수를 선언과 동시에 초기화하는 것을 명시적 초기화라고 한다. 가장 기본적이면서도 간단한 초기화방법이므로 여러 초기화 방법 중에서 가장 우선적으로 고려되야 함

 

class Car{

int door=4; // 기본형(primitive type) 변수의 초기화

Engine e = new Engine(); //참조형(reference type)변수의 초기화

//..

}

 

명시적 초기화가 간단하고 명료하긴 하지만, 보다 복합한 초기화 작업이 필요할때는 "초기화 블럭(initialzation block)" 또는 생성자를 사용해야 한다.

 

초기화 블럭

초기화 블럭에는 "클래스 초기화 블럭"과 "인스턴스 초기화 블럭" 두가지 종류가 있다.

클래스 초기화 블럭은 클래스변수의 초기화에 사용되고, 인스턴스 초기화 블럭은 인스턴스변수의 초기화에 사용된다.

 

● 클래스 초기화 블럭- 클래스 변수들의 초기화에 사용된다.

● 인스턴스 초기화블럭- 인스턴스변수들의 초기화에 사용된다.

 

초기화 블럭을 작성하려면, 인스턴스 초기화 블럭은 단순히 클래스 내에 블럭{}을 만들고, 그안에 코드를 작성하기만 하면된다. 그리고, 클래스 초기화 블럭은 인스턴스 초기화 블럭 앞에 단순히 static을 덧붙이기만 하면 된다.

 

초기화 블럭 내에서는 메서드 내에서와 같이 조건문, 반복문, 예외처리구문 등을 자유롭게 사용할 수 있으므로, 초기화작업이 복잡하여 명시적 초기화 만으로는 부족한 경우 초기화 블럭을 사용한다.

 

클래스 초기화 블럭은 클래스가 메모리에 처음 로딩될때 한번만 수행되며, 인스턴스 초기화 블럭은 생성자와 같이 인스턴스를 생성할때 마다 수행된다. 그리고, 생성자보다는 인스턴스 초기화블럭이 먼저 수행된다는 사실도 기억해두자.!!

 

★ 클래스가 처음 로딩될때 클래스변수들이 메모리에 만들어지고, 바로 클래스 초기화블럭들이 클래스 변수들을 초기화하게 되는 것이다.

 

인스턴스변수의 초기화는 주로 생성자를 사용하기 때문에, 인스턴스 초기화 블럭은 잘 사용되지 않는다. 대신 클래스의 모든 생성자에서 공통적으로 수행되어져야 하는 코드가 있는 경우 생성자에 넣지 않고 인스턴스 초기화 블럭에 넣어두면 코드의 중복을 줄일수 있다.

 

 

 

+ Recent posts