저번 시간에 이어, 이번엔 애플리케이션 개발 시 System.out.println()메서드를 지양하는 이유에 대해 다루어 보겠습니다. 학부생 교육 과정에서 특별하게 언급되지 않는 이상 모르고 지나칠 수도 있는 내용입니다. 이번 기회에 숙지하실 수 있길 바랍니다.
Q: System.out.println()메서드를 지양하는 이유를 아시나요?
대표적으로 세 가지가 있습니다.
- 우선, 휘발성으로, 어디에 적재되는 것이 아니라 출력 후 사라지기 때문에 로그로 추적할 수 없습니다.
- 둘째로 로그의 시간, 위치, 수준 등이 전혀 없으므로 정보가 부족하다고 할 수 있습니다.
- 마지막으로 성능이 저하됩니다. synchronized키워드를 사용하는데, 해당 메서드는 임계영역이 되고, 한 thread씩 접근해서 처리하며 I/O작업이 완료될 때까지 CPU가 대기하게 됩니다.
Q: 로그를 사용하는 이유가 무엇인가요?
쓰레드 정보, 클래스 이름 같은 부가 정보를 함께 볼 수 있고, 출력 모양과 로그 레벨을 조정할 수 있습니다.
- 서버에는 모든 로그 출력, 운영 서버에는 출력 x
파일, 네트워크 등 로그를 별도의 위치에 다양한 형태로 저장할 수 있습니다.
내부 버퍼링, 멀티 쓰레드 등, System.out보다 성능이 수십 배 이상 뛰어나기 때문에, 실무에선 꼭 로그를 사용해야 합니다.
Q: 로그 사용 시,
log.debug(“data=”+data)와
log.debug(“data={}”, data)의 차이는 무엇인가요?
연산자를 사용한 로그는, 실제 CPU를 사용하여 연산이 발생하고, 파라미터를 넘기는 메서드는, 로그 레벨에 따라 실제 아무 연산이 발생하지 않기도 합니다.
마치며
이번 시간에는 System.out.println과 로그에 대한 면접 질문들을 알아보았습니다. 생각보다 생소한 질문일 수 있지만, 응용 질문으로 등장하기 때문에 알고는 있어야 하는 내용입니다.
지금까지 많은 질문들을 다뤄 보았는데요, Java에 대한 면접 대비는 해당 Java 카테고리만으로도 강점을 어필할 수 있을 것으로 생각합니다.
내용이 적은 포스팅도 있으며, 한 번에 보기엔 많은 양을 기록한 포스팅도 있습니다. 1편부터 반복으로 학습하시고 좋은 결과를 내실 수 있으시길 바랍니다.
답글 남기기