본문 바로가기

Java/공부공부

[기타] System.out.println 실무에서 사용하면 안되는 이유

 

https://systemdata.tistory.com/21

 

System.out.println 메소드는 실무에서 `절대 사용하지마라.`

목차개요System.out.println 무엇인가?왜 사용해서는 안되는가?로그를 남기면 안되는 것인가?결론1. 개요프로그래밍을 처음 접하면 System.out.println(”Hello World”);같이 콘솔에 출력하는 것을 배우게

systemdata.tistory.com

 

 

실무에서 사용하면 안되는 이유.

 - 동기화된 블로킹 I/O 방식이기 때문에 성능 저하 문제 발생. (오버헤드 발생) 

  => Log4j, SLF4J 같은 비동기 로깅 프레임워크 사용!

    I/O를 비동기적으로 처리하고, 멀티스레드 환경에서 성능을 더 효과적으로 관리한다.

 - 로그 레벨을 지정할 수 없기 때문 ( TRACE > DEBUG > INFO > WARN > ERROR > FATAL )

 - 로그 정보를 남길 수 없기 때문 (날짜, 시간, 로직에 대한 정보 등..)

 

* System.out의 내부동작

System.out은 Java의 표준 출력 스트림으로 PrintStream 클래스의 인스턴스.

PrintStream 은 OutputStream 을 확장하여 텍스트와 바이트 데이터를 출력 스트림에 기록.

PrintStream 의 주요 메서드들은 synchronized 로 정의되어 있어, 동기화된 방식으로 실행.

                         priintln() 메서드 호출 ( autoflush수행 ) =>  PrintStream의 synchronized로 구성된 write() 메서드가 호출.

즉, 하나의 스레드에서 출력 작업이 진행되는 동안 다음 스레드는 이 출력 메소드에 접근 불가. (블로킹)

 


 

* 스트림 클래스  :  데이터의 연속적인 흐름을 다루기 위해 설계된 클래스.

 

 - 바이트 스트림 계층 (1바이트씩 전송)   InputStream / OutputStream 클래스

   바이트 단위로 데이터를 처리. (파일, 이미지, 네트워크 소켓 등 바이너리 데이터를 읽고 쓸 때)

  InputStream / OutputStream 클래스

 

 - 문자 스트림 계층 (2바이트씩 전송)  

  문자 단위로 데이터를 처리. (텍스트 데이터를 읽고 쓸 때)

  Reader / Writer 클래스

 


 

https://www.tcpschool.com/java/java_io_stream

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 


 

https://velog.io/@duck-ach/23.-%EC%9E%85%EC%B6%9C%EB%A0%A5-%EC%8A%A4%ED%8A%B8%EB%A6%BC-InputStream-OutputStream-JAVA

 

23. 입출력 스트림 (InputStream, OutputStream) [ JAVA ]

스트림(Stream) > 스트림(Stream) 이란, '데이터의 흐름'을 의미한다. 프로그램은 외부에서 데이터를 읽거나 외부로 데이터를 출력하는 작업이 빈번하게 일어나는데, 이때 데이터는 어떠한 통로를 통

velog.io

 


 

 

https://m.blog.naver.com/pjok1122/221505593049

 

자바(Java) java.io.File 객체, 스트림(Stream) 클래스

1. java.io - 자바로 입출력 기능을 구현하는 데에 필요한 다양한 클래스를 포함하고 있는 패키지 - File ...

blog.naver.com