728x90
Initialization
변수의 초기화
변수를 처음 선언하고 초기화 하는 것이다.
선언하자마자 자신이 사용하고 싶은 값으로 초기화 해주는것이 좋다.
명시적 초기화(explicit initialization)
변수를 선언함과 동시에 초기화
말 그대로 변수를 선언함과 동시에 초기화한다.
초기화 블럭(initialization block)
명시적 초기화에 비해 복잡한 초기화 작업이 필요할 때에 사용한다.
두 가지 종류가 있는데
- 클래스 초기화블럭
- 클래스변수의 초기화에 사용
- 클래스가 메모리에 처음 로딩될 떄에 한 번 수행
- 클래스변수의 초기화에 사용
- 인스턴스 초기화블럭
- 인스턴스 초기화에 사용
- 생성자와 같이 인스턴스를 생성할 때 마다 수행
- 인스턴스 초기화 블럭이 생성자 초기화 블럭보다 먼저 수행된다.
- 생성자와 같이 인스턴스를 생성할 때 마다 수행
- 인스턴스 초기화에 사용
그래서 초기화 블럭이 뭔데?
public class Test {
int count = 0;
int serialNo = 0;
String color;
String gearType;
public Test() {
count++; // 중복코드
serialNo = count; // 중복코드
color = "White";
gearType = "Auto";
}
public Test(String color, String gearType) {
count++; // 중복코드
serialNo = count; // 중복코드
this.color = color;
this.gearType = gearType;
}
}
이런 식으로 중복되는 코드가 사용되는 코드가 있을 때에
public class Test {
int count = 0;
int serialNo = 0;
String color;
String gearType;
// 인스턴스 초기화 블럭
{
count++;
serialNo = count;
}
public Test() {
color = "White";
gearType = "Auto";
}
public Test(String color, String gearType) {
this.color = color;
this.gearType = gearType;
}
}
인스턴스 초기화 블럭
을 사용하여 초기화 할 수 있다.
한번 이를 확인해 보면
public class Test {
static {
System.out.println("static { }"); // 클래스 초기화 블럭
}
{
System.out.println("{ }"); // 인스턴스 초기화 블럭
}
public Test() {
System.out.println("생성자");
}
public static void main(String[] args) {
System.out.println("Test test = new Test();");
Test test = new Test();
System.out.println("Test test2 = new Test();");
Test test2 = new Test();
}
}
static { }
Test test = new Test();
{ }
생성자
Test test2 = new Test();
{ }
생성자
이렇게
- 클래스 초기화 블록이 가장 먼저 수행
- Test객체 생성 시 인스턴스 최기화 블럭 실행
이 된다.
또한 클래스 초기화 블럭은 최초 1회만, 인스턴스 초기화 블럭은 인스턴스 생성 시마다 수행됨이 확인된다.
'이론 정리 > java' 카테고리의 다른 글
final (0) | 2023.01.24 |
---|---|
직렬화(Serializable) (0) | 2023.01.24 |
Optional이란?? (0) | 2023.01.19 |
Stream의 연산 (1) | 2023.01.14 |
Stream 만들기 (0) | 2023.01.13 |