변수의 초기화
- 인스턴스 변수는 초기화를 하지 않아도 자동으로 변수의 자료형에 맞는 기본값으로 초기화가 이루어지지만
지역변수
는 사용 전 반드시 초기화해야한다. - 인스턴스 변수의 초기화는 선택적이지만, 지역변수의 초기화는 필수적이다.
- 초기화 방식
- 명시적 초기화(explicit initialization)
- 생성자(constructor)
- 초기화 블럭(initialization block)
- 인스턴스 초기화 블럭 : 인스턴스 변수를 초기화 하는데 사용
- 클래스 초기화 블럭 : 클래스 변수를 초기화 하는데 사용
명시적 초기화(explicit initialization)
- 변수를 생성함과 동시에 초기화 하는 방법
- 여러 초기화 방법 중 우선적으로 고려되어야 한다.
- 명시적 초기화가 간단 명료하지만, 보다 복잡한 초기화 작업이 필요할 때는
초기화 블럭
또는생성자
를 사용해야 한다.
초기화 블럭(initialization block)
- 초기화 블럭에는 인스턴스 초기화 블럭과 클래스 초기화 블럭이 있다.
1. 인스턴스 초기화 블럭은 인스턴스 변수의 복잡한 초기화에 사용된다.
2. 클래스 초기화 블럭은 클래스 변수의 복잡한 초기화에 사용된다.
- 인스턴스 초기화 블럭은 단순히 클래스 내에
블럭{}
을 만들고 그 안에 코드를 작성하면 된다. - 클래스 초기화 블럭은
블럭{} 앞에 static
을 붙여주면 된다. - 초기화 블럭 내에는 메서드와 같이 조건문, 반복문, 예외 처리 구문을 자유롭게 기술할 수 있으므로 복잡하여 명시적 초기화만으로는 부족한 경우 초기화 블럭을 사용한다.
class initClass {
static { ... } // 클래스 초기화 블럭
{ ... } // 인스턴스 초기화 블럭
}
- 클래스 초기화 블럭은
클래스가 메모리에 처음 로딩될 때 한번만 수행
되며, 인스턴스 초기화 블럭은생성자와 같이 인스턴스를 생성할 때마다 수행
된다. 생성자보다 인스턴스 초기화 블럭이 먼저 실행
된다.- 클래스가 처음 로드될 때 클래스 변수들이 자동적으로 메모리에 만들어지고, 곧바로 클래스 초기화 블럭이 실행되어 클래스 변수들을 초기화한다.
- 인스턴스 변수의 초기화는 주로 생성자를 사용하고, 인스턴스 초기화 블럭은 모든 생성자에서 공통으로 수행되어야 하는 코드를 기술한다.
- 코드의 중복을 줄이는 것은 코드의 신뢰성을 높여 주고, 오류의 발생가능성을 줄여 준다는 장점이 있다.
코드의 재사용성을 높이고 중복을 제거하는 것
이 객체지향프로그래밍이 추구하는 궁극적 목표이다.
- BlockTest가 메모리에 로딩될 때, 클래스 초기화 블럭이 가장 먼저 수행된다.
- 그 다음 main 메서드가 수행되어 BlockTest 인스턴스를 생성한다.
- 인스턴스가 생성되며 인스턴스 초기화 블럭이 수행되며 그 후 생성자가 수행된다.
멤버변수의 초기화 시기와 순서
- 클래스 변수의 초기화 시점 : 클래스가 처음 로딩될 때 단 한번 초기화
- 인스턴스 변수의 초기화 시점 : 인스턴스가 생성될 때마다 각 인스턴스 별로 초기화
- 클래스 변수의 초기화 순서 : 기본값 -> 명시적 초기화 -> 클래스 초기화 블럭
- 인스턴스 변수의 초기화 순서 : 기본값 -> 명시적초기화 -> 인스턴스 초기화 블럭 -> 생성자
프로그램 실행도중 클래스에 대한 정보가 요구될 때
, 클래스는 메모리에 로딩된다. 예를 들면 클래스 멤버를 사용할 때, 혹은 인스턴스를 생성할 때 등이 해당한다.;- 하지만 이미 클래스가 메모리에 로딩되어 있다면, 또다시 로딩하지 않는다. 물론 초기화 또한 다시 수행되지 않는다.
댓글남기기