생성자와 static 블록은 객체와 클래스의 초기화를 담당하는 요소다. 이 둘은 초기화 시점과 적용 범위에서 차이가 있으며 각기 다른 목적을 가지고 있다.
static 블록
- 클래스 로딩 시점에 한 번만 실행되며 클래스 수준에서의 초기화 작업에 사용된다.
- 주로 static 변수의 초기화에 활용된다.
- 인스턴스 생성과는 무관하게 클래스가 메모리에 로드될 때 실행된다.
위 예제에서 static 블록은 MyClass가 로딩될 때 실행되며 staticVariable을 초기화한다.
생성자
- 객체가 생성될 때마다 호출된다.
- 인스턴스 변수의 초기화나 객체 생성 시 필요한 설정을 담당하며, 오버로딩을 통해 다양한 생성자를 정의할 수 있다.
- 반환 타입이 없으며 클래스 이름과 동일한 이름을 가진다.
생성자는 객체가 생성될 때마다 실행되므로 여러 객체를 생성하면 그 수만큼 생성자가 호출된다.
static 블록 vs 생성자
구분 | static 블록 | 생성자 |
실행 시점 | 클래스 로딩 시 한 번 실행 | 객체 생성 시마다 실행 |
적용 대상 | 클래스 수준 (static 변수 등) | 인스턴스 수준 (인스턴스 변수 등) |
호출 횟수 | 한 번 | 객체 생성 횟수만큼 |
목적 | 클래스 초기화, 복잡한 static 변수 설정 | 객체 초기화, 인스턴스 변수 설정 |
선언 방법 | static { ... } | public 클래스이름() { ... } |
오버로딩 가능 | 불가능 | 가능 |
활용 사례
static 블록의 활용
- 데이터베이스 연결과 같은 리소스를 클래스 로딩 시에 미리 설정해야 할 때.
- 복잡한 static 변수의 초기화가 필요한 경우.
- 로깅 설정 등 애플리케이션 전역에서 한 번만 설정하면 되는 경우.
주의사항
static 블록 남용 주의
많은 로직을 담으면 클래스 로딩 시간이 길어질 수 있으므로 필요한 초기화 작업만 수행하는 것이 좋다.
생성자에서의 초기화
생성자에서 복잡한 로직을 처리하면 객체 생성 시 성능에 영향을 줄 수 있으므로 적절히 분리하는 것이 좋다.
순서 의존성
여러 개의 static 블록이 있는 경우 선언된 순서대로 실행된다. 하지만 코드의 가독성을 위해 일반적으로 한 개의 static 블록만 사용하는 것이 좋다.
'Dev > Java' 카테고리의 다른 글
『Java』 상속보다 컴포지션을 사용해야 하는 이유 (0) | 2024.11.20 |
---|---|
『Java』 for-each 문을 사용하기 위한 인터페이스는 무엇인가? (0) | 2024.11.19 |
『Java』 Exception 처리, 맛보기 (0) | 2024.11.08 |
『Java』 동일성 (Identity) vs 동등성 (Equality) (0) | 2024.11.04 |
『Java』 int 타입과 Integer 타입은 성능 차이가 있는가? (1) | 2024.11.04 |