초기화 블럭(initialization block)이란?
클래스의 멤버변수의 초기화 방법에는 여러가지가 있다.
1. 명시적 초기화
2. 생성자
3. 초기화 블럭
1. 명시적 초기화는 기본적인 방법으로 변수를 선언과 동시에 값을 넣어 초기화 하는 방법이다.
2. 생성자를 통한 초기화는 앞 생성자에서 충분히 다루어 이해할 수 있었다.
3. 이번에 정리할 것은 초기화 블럭인데, '클래스 초기화 블럭'과 '인스턴스 초기화 블럭' 두 가지 종류가 있다.
전자는 클래스변수의 초기화에, 후자는 인스턴스변수의 초기화에 사용된다.
초기화 블럭을 작성하려면, 인스턴스 초기화 블럭은 단순히 클래스 내에 블럭{ }을 만들고 클래스 초기화 블럭은 앞에 static만 붙여주면 된다. 이렇게 생성한 초기화 블럭 안에는 조건문,반복문,예외처리문 등을 자유롭게 사용할 수 있으므로, 초기화 작업이 복잡하여 명시적 초기화를 이용한 초기화만으로는 부족한 경우 초기화 블럭을 사용한다.
초기화 블럭 수행 시기
- 클래스 초기화 블럭 : 클래스가 메모리에 처음 로딩될 때 단 한번만 수행
- 인스턴스 초기화 블럭 : 생성자와 같이 인스턴스를 생성할 때마다 수행 (생성자 보다 인스턴스 초기화 블럭이 먼저 수행)
인스턴스 변수의 초기화는 주로 생성자를 사용하고, 인스턴스 초기화 블럭은 모든 생성자에서 공통으로 수행돼야 하는 코드를 넣는데 사용한다.
멤버변수의 초기화 시기와 순서 정리
클래스변수의 초기화 시점 : 클래스가 처음 로딩될 때 한번 초기화 된다.
인스턴스변수으 초기화 시점 : 인스턴스가 생성될 때마다 각 인스턴스별로 초기화가 이루어진다.
클래스 변수의 초기화 순서 : 기본값->명시적초기화->클래스 초기화 블럭
인스턴스 변수의 초기화 순서 : 기본값 -> 명시적초기화->인스턴스 초기화 블럭->생성자
'Java > 객체지향프로그래밍' 카테고리의 다른 글
[Java] 오버라이딩(overriding) - 코딩밥상 (0) | 2023.02.08 |
---|---|
[Java] 상속(Inheritance) - 코딩밥상 (0) | 2023.02.08 |
[Java] 생성자(Constructor) - 코딩밥상 (0) | 2023.02.07 |
[Java] 오버로딩(overloading) - 코딩밥상 (0) | 2023.02.07 |
[Java] JVM의 메모리 구조와 클래스 멤버 - 코딩밥상 (0) | 2023.02.07 |