Java 로거 : 정적 블록 초기화 또는 변수 선언에서 초기화


15

현재 다음과 같은 방식으로 프로젝트에서 로거를 사용하고 있습니다.

private static final Logger LOGGER;

static{
  LOGGER = logger.getLogger();
}

로거 변수를 초기화하기 위해 정적 블록을 사용하는 코드 검토를 받았습니다. 선언문 자체에서 로거 변수를 초기화하라는 지시를 받았습니다.

private static final Logger LOGGER = Logger.getLogger();

정적 블록에서 초기화하지 않으면 어떤 차이점이 있는지 알아 내려고합니다. 이것이 연습인지 알고 싶습니다.


8
차이는 없지만 그 중 하나는 더 많은 타이핑과 더 많은 코드 줄이 필요합니다.
user253751

둘 다 정확히 동일한 바이트 코드를 생성합니다. 당신이 선호하는 것은 전적으로 맛의 문제입니다.
user207421

롬복을 왜 사용하지 않습니까?
복원 모니카

답변:


48

이니셜 라이저 시퀀스와 관련된 기괴한 코너 사례를 제외하고 두 대안은 정확히 동일하게 작동합니다.

그러나 선언에서 인스턴스를 초기화하는 것이 더 짧고 친숙하므로 그 이유만으로 선호되어야합니다.

정적 초기화 블록은 다소 이국적인 구조이므로 예외를 처리해야 할 때와 같이 실제로 부가 가치를 제공 할 때만 사용해야합니다.


7
정적 블록을 사용하는 드문 경우로 예외를 언급하는 것이 좋습니다.
user949300

4
HashMap을 초기화하는 것도 좋은 사용 사례입니다.
RubberDuck

3
@RubberDuck 비록 Java 9의 Map.of메소드가 도움이 될 것입니다.
cbojar

1
@cbojar Map.of는 불변의 맵을 반환하므로 실제로 필요한 경우 HashMap여전히 이전 방식으로 수행해야합니다. 또는new HashMap(Map.of(...))
kapex

1
@Kapep 예, 생성자에 전달하기 위해 초기화 블록 대신 변경 가능한 맵이 필요한 경우 어떻게해야합니까?
cbojar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.