본문 바로가기
Dev/Java

『Java』 생성자와 static 블록은 무엇이 다를까?

by 세대교체 2024. 11. 19.

생성자static 블록은 객체와 클래스의 초기화를 담당하는 요소다. 이 둘은 초기화 시점과 적용 범위에서 차이가 있으며 각기 다른 목적을 가지고 있다.

 

 

static 블록

  • 클래스 로딩 시점에 한 번만 실행되며 클래스 수준에서의 초기화 작업에 사용된다.
  • 주로 static 변수의 초기화에 활용된다.
  • 인스턴스 생성과는 무관하게 클래스가 메모리에 로드될 때 실행된다.

 

위 예제에서 static 블록은 MyClass가 로딩될 때 실행되며 staticVariable을 초기화한다.

 

 

생성자

  • 객체가 생성될 때마다 호출된다.
  • 인스턴스 변수의 초기화나 객체 생성 시 필요한 설정을 담당하며, 오버로딩을 통해 다양한 생성자를 정의할 수 있다.
  • 반환 타입이 없으며 클래스 이름과 동일한 이름을 가진다.

 

생성자는 객체가 생성될 때마다 실행되므로 여러 객체를 생성하면 그 수만큼 생성자가 호출된다.

 

 

static 블록 vs 생성자

구분 static 블록 생성자
실행 시점 클래스 로딩 시 한 번 실행 객체 생성 시마다 실행
적용 대상 클래스 수준 (static 변수 등) 인스턴스 수준 (인스턴스 변수 등)
호출 횟수 한 번 객체 생성 횟수만큼
목적 클래스 초기화, 복잡한 static 변수 설정 객체 초기화, 인스턴스 변수 설정
선언 방법 static { ... } public 클래스이름() { ... }
오버로딩 가능 불가능 가능

 

 

활용 사례

static 블록의 활용

  • 데이터베이스 연결과 같은 리소스를 클래스 로딩 시에 미리 설정해야 할 때.
  • 복잡한 static 변수의 초기화가 필요한 경우.
  • 로깅 설정 등 애플리케이션 전역에서 한 번만 설정하면 되는 경우.

 

 

주의사항

static 블록 남용 주의

많은 로직을 담으면 클래스 로딩 시간이 길어질 수 있으므로 필요한 초기화 작업만 수행하는 것이 좋다.

 

생성자에서의 초기화

생성자에서 복잡한 로직을 처리하면 객체 생성 시 성능에 영향을 줄 수 있으므로 적절히 분리하는 것이 좋다.

 

순서 의존성

여러 개의 static 블록이 있는 경우 선언된 순서대로 실행된다. 하지만 코드의 가독성을 위해 일반적으로 한 개의 static 블록만 사용하는 것이 좋다.