https://systemdata.tistory.com/21
실무에서 사용하면 안되는 이유.
- 동기화된 블로킹 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
https://m.blog.naver.com/pjok1122/221505593049
'Java > 공부공부' 카테고리의 다른 글
[JAVA] port연결 확인 스케줄러 (ScheduledExecutorService, CountDownLatch) (0) | 2024.11.25 |
---|---|
[JAVA] JAR & WAR (0) | 2024.11.16 |
[Java] 자바에서 리눅스 명령어 실행 (JSch , Session , ChannelExec ) (0) | 2024.11.06 |
[Java] Stream API (Collectors 클래스) (0) | 2024.10.29 |
[JAVA] objectMapper, modelMapper (0) | 2024.10.25 |