본문 바로가기
Java

[Java] System.out.println() 왜 사용하면 안돼?

by 왕타오 2023. 11. 20.

 

멀티 스레드 환경에서 System.out.println()를 사용하게 되면,

하나의 스레드가 println()  끝날때까지 대기해야한다.

이로 인해 프로그램 소요시간이 길어질 수 있으며, 성능을 저하시킬  있다. 

 

 

보통 자바 언어를 처음 배우기 시작할때 "Hello World"를 콘솔에 출력하는 것을 배운다.

 

System.out.println() 이란?

- 자바 언어로 프로그래밍할 때 디버깅 용도로 콘솔에 출력하는 메소드 

 

근데, 실무에서는 System.out.println()을 사용하지 말라고 한다.

 

왜 사용하지 말라고 할까? 

- 가장 큰 이유는 '성능 이슈'가 있다. 

 

println() 메소드를 찾아가면 아래와 같이 synchronized 블록으로 구현되어있는 것을 볼 수 있다.

 

synchronized 블록으로 인해 lock이 걸리게 된다. 

 

또한 synchronized 블록안에 호출된 newLine() 함수를 찾아가보면

위 함수 역시 try 블록 안에 synchronized 키워드로 구현되어있다. 

 

자바 멀티 스레드 환경일 때 락이 발생하여, 하나의 스레드가 println() 끝날때까지 아무 일을 실행할 수 없고

대기해야 하기에 성능을 저하시킬 있다.

     

    정리

    * 운영 환경 시스템에서는 System.out.println() 메소드를 사용해서는 안된다.

    * 로그를 남기고 싶다면 logger를 사용하도록 하자.