![[기술 면접] 14. System.out.println()메서드를 지양하는 이유를 아시나요? 1 System.out.println()메서드를 지양하는 이유를 아시나요?](http://allhoneytip.com/wp-content/uploads/2023/09/제목을-입력해주세요__복사본-23-001-300x300-optimized.png)
저번 시간에 이어, 이번엔 애플리케이션 개발 시 System.out.println()메서드를 지양하는 이유에 대해 다루어 보겠습니다. 학부생 교육 과정에서 특별하게 언급되지 않는 이상 모르고 지나칠 수도 있는 내용입니다. 이번 기회에 숙지하실 수 있길 바랍니다.
![[기술 면접] 14. System.out.println()메서드를 지양하는 이유를 아시나요? 2 System.out.println()메서드를 지양하는 이유를 아시나요?](http://allhoneytip.com/wp-content/uploads/2023/07/image-59-1024x512-optimized.png)
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편부터 반복으로 학습하시고 좋은 결과를 내실 수 있으시길 바랍니다.
![[기술 면접] 14. System.out.println()메서드를 지양하는 이유를 아시나요? 6 image 131](https://allhoneytip.com/wp-content/uploads/2023/09/image-131-optimized.png)
“이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.”
답글 남기기