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
'자바 JAVA' 카테고리의 다른 글
| java static 이란 무엇인가? (0) | 2026.01.08 |
|---|---|
| [Network] Apachi, Nginx, Tomcat 이 하는일이 뭘까? (Apachi와 NginX의 차이점) (1) | 2022.12.11 |
| [Mac] JAVA 11(Zulu JDK11) 다운로드 및 설치 (0) | 2022.12.08 |
| [java] HashMap 순회, 4가지 반복문 (2) | 2022.12.07 |
| [java] 자바 메모리 구조(static, stack, heap) (0) | 2022.11.18 |
댓글