[JSCODE] 모의면접으로 학습하는 자바 2주차 - 심화질문 (18)

동춘·2024년 11월 6일

[면접스터디] 자바

목록 보기
6/15

System.out.println 클래스는 성능이 좋지 않다고 하는데 이유가 무엇일까요?

  • System.out.println는 로깅에 사용되는 입출력 구문입니다.

로깅이란 ?
시스템의 중요 기능이 실행되는 지점에 로그(log)를 남겨야 하는데 이러한 활동을 로깅(logging)이라고 한다. 위의 System.out.println()도 로깅(logging)의 한 종류입니다.

  • 왜 사용하지 말아야 할까 ?
    • 로그 레벨 관리의 어려움 : 로그 레벨을 지정할 수 없기 때문에 디버깅 용도로 부적적하다.
      • System.out과 err 두가지만 사용이 가능하다.
    • 성능 저하 : 블로킹 I/O와 멀티쓰레드에서 락이 발생하기 때문이다.
      • out은 PrintStream 타입의 인스턴스이며 이 PrintStream 클래스는 io 패키지 내에 있다. 즉 println()은 I/O 작업이며 이는 I/O 시스템콜을 호출하여 커널모드에서 작업한다는 의미이다. 당연히 시간이 많이 드는 작업이며 성능에 좋지 않다.
      • println()은 synchronized 메서드이다 : 일종의 메서드 실행으로 보기때문에 System.out.println이 끝날때까지 아무 일을 실행할 수 없고 대기해야 하기에 성능을 저하시킬 수 있다.
    • 유지 보수성 저하 : 출력 메시지가 코드에 하드코딩되어 있으면 나중에 수정, 삭제 등의 작업이 어렵다.

System.out.println()은 시스템에 많은 오버헤드가 발생하기 때문에 느린 작업이라 할 수 있다.
때문에 사용시 지양해야한다.

profile
건강하개

0개의 댓글