본문 바로가기
자바 JAVA

Logger를 private static final로 선언하는 이유 3가지

by 비타민찌 2026. 1. 8.
728x90

안녕하세요.

보통 Logger 이렇게 구현하고 쓰시죠?

private static final Logger logger =
    LoggerFactory.getLogger(MyClass.class);

 

이 한 줄에는 각 키워드마다 분명한 이유가 있는데요.

 

개발자 면접 질문에서도 자주 등장하는 

'Logger를 private static final로 선언하는 이유'에 대해 정리해 봅니다.

 

1. private

이 클래스 안에서만 쓰라고

 

Logger는

  • 다른 클래스가 가져다 쓰라고 있는 게 아니고
  • 이 클래스 내부에서 로그 찍으라고 있는 도구 입니다.

마치 집 안에 있는 개인 일기장 같은 거죠.

밖에 공개할 이유가 없습니다.

 

 

2. static

객체마다 가질 필요가 없다.

 

로그는 그냥 이 클래스에서 무슨 일이 있었는지 기록하는 용도죠.

Logger는 

  • 객체의 상태를 표현하지 않고
  • 요청마다 값이 달라지지 않고
  • 어떤 인스턴스에서 호출되었는지에 따라 달라질 필요가 없고
  • 이 클래스에서 어떤 일이 발생했는지를 기록하는 도구 입니다.

즉, Logger는 객체 고유의 정보가 아니라
클래스 전체에 공통으로 적용되는 도구
에요.

 

그래서 static이 적절합니다.

static으로 선언하면

객체 생성 여부와 관계없이 클래스 로딩 시 한 번만 생성되고,

모든 인스턴스가 동일한 Logger를 공유할 수 있어요.

 

 

3. final

중간에 바뀌면 안 되니까

logger는 한 번 정해지면 다른 logger로 바뀔 이유가 없습니다.

그런데 final이 없으면,

logger = otherLogger;

이런 식으로 값을 바꾸는 실수를 할 수 있겠죠.

그래서 final로 고정시키는 것 입니다.

 

 

4. 결론

logger는:

  • 값도 아니고
  • 상태도 아니고
  • 비즈니스 데이터도 아님

 

그래서

객체마다 가질 필요도 없고, 

값이 바뀔 필요 없고

외부에서 쓸 필요도 없다.

 

이 세 가지가 딱 맞아떨어지는 선언이 바로

private static final Logger logger
 

 

logger는 객체의 정보가 아니라
이 클래스에서 무슨 일이 있었는지 기록하는 공용 노트!
그래서 private static final로 선언하는 거라고 할 수 있겠습니다.

싱글톤처럼 동작한다고도 할 수 있겠네요.

 

 

Point

 

  • private → 우리 반 안에서만 씀!
  • static → 학생마다 하나 아니고, 반에 하나!
  • final → 중간에 바꾸지 마!

 

728x90

댓글