Java

[Java] 자바 System.out과 System.err의 차이

Razelo 2021. 1. 5. 17:29

 

자바의 System.out System.err 의 차이에 대해서 알아보자. 

 

사실 별 차이가 없는 줄 알았는데 생각보다 흥미로운 차이가 있어서 정리하게 되었다. 

 


out과 err는 다른 타이밍에 flush를 한다는 것이 차이점이다. 

 

out스트림은 자체적으로 자신의 버퍼를 가지고 있다. 여러개의 print request를 버퍼에 넣고 기다렸다가 적절한 타이밍에 한번에 출력하는 것이다. 이렇게 하는 이유는 속도 때문이라고 한다. print구문이 있을때마다 바로 콘솔에 메시지를 flush해서 출력하면 JVM 성능 상에 영향을 주기 때문이라고 한다. 

 

err스트림도 자체적으로 자신의 버퍼를 가지고 있다고 한다. 하지만 err라는 것을 보면 알 수 있듯이 에러 상황과 같이 일반적이지 않은 상황에서의 출력을 의미하기 때문에 대부분 곧바로 flush 즉 출력된다고 한다. 그런데 위에서도 언급했듯이 바로 flush하게 되면 JVM 성능 상에 영향을 주기 때문에 err는 주의해서 써야하고 마찬가지로 out에 비해서 상대적으로 느리다고 한다. 

 

그래서 코드 상에서 out과 err를 찍게될 경우 err가 먼저 찍힐 가능성이 더 크다고 한다. 그래서 err는 사실 많이 쓰이지는 않고 out만 쓰거나 별도의 로그 라이브러리를 쓰는 경우가 많다고 한다. 

 

또 한가지 차이는 err의 경우 파일로 출력하는 동작이 불가능하다고 한다. 즉 리눅스에서 말하는 Redirection인 > 가 작동하지 않는다고 한다. 그 이유는 에러라는 것은 기본적으로 화면에 출력되서 개발자에게 보여지기 위함이기 때문이라고 한다. 

 


아래 블로그에서 많은 도움을 받았다. 

 

감사합니다. 

 

 

https://m.blog.naver.com/PostView.nhn?blogId=2feelus&logNo=220110811363&proxyReferer=https:%2F%2Fwww.google.com%2F

 

System.out 과 System.err 의 차이

자바 디버깅을 위해 System.out.println 을 많이도 사용하고 계실 것이다.  System.out.println(" 3...

blog.naver.com

 

 

http://mwultong.blogspot.com/2007/01/java-systemerrprintln-outprint.html

 

Java/자바] System.err.println, out.print, 차이점/차이; System.err.print() 메소드(함수)

일반적인 문자열을 "표준출력"으로 출력하는 System.out.println() 과 달리, 에러 메시지를 "표준 에러 출력"으로 출력하는 System.err.println() 은 재지향이 되지 않습니다. (업데이트: 윈도우에서는 안되

mwultong.blogspot.com

 

 

반응형