개발/Java&Kotlin

[Java] Stream 사용 시 주의 사항

devhooney 2023. 6. 14. 10:46
728x90

스트림은 자바 8부터 도입된 기능으로, 데이터 처리를 간결하고 효율적으로 할 수 있도록 지원한다. 이를 적절히 활용하면 데이터 처리 작업을 더욱 쉽고 효율적으로 수행할 수 있다. 

 

스트림은 연속된 데이터 처리, 지연 평가(Lazy evaluation), 파이프라인 처리, 병렬 처리, 스트림 연산, 외부 반복 숨김 등의 특징이 있다. 하지만 주의해서 사용해야 한다.

 

이유
리소스 누수: 스트림은 외부 리소스(파일, 네트워크 연결 등)와 관련될 수 있다. 스트림을 제대로 닫지 않으면 리소스 누수가 발생할 수 있다. 따라서, 스트림 사용 후에는 반드시 명시적으로 닫아야 한다. 예외 발생 여부와 관계없이 finally 블록이나 try-with-resources 문을 사용하여 스트림을 닫아야 한다.

버퍼링과 플러싱: 스트림은 데이터를 버퍼에 쌓아두고, 특정 기준에 따라 한 번에 전송하거나 출력한다. 버퍼링과 플러싱을 올바르게 처리하지 않으면 원하는 동작을 수행하지 못할 수 있다. 예를 들어, 버퍼를 플러시하지 않으면 출력 내용이 즉시 반영되지 않을 수 있다.

동기와 비동기 처리: 스트림은 동기적인 처리 방식과 비동기적인 처리 방식을 모두 지원할 수 있다. 동기적인 스트림은 데이터를 읽거나 쓸 때까지 블로킹되며, 비동기적인 스트림은 백그라운드에서 작업을 처리하고 완료될 때까지 대기하지 않는다. 스트림을 사용할 때 이러한 동기와 비동기 처리 방식을 제대로 이해하고 사용해야 한다.

예외 처리: 스트림 작업은 예외가 발생할 수 있다. 파일이 존재하지 않거나, 네트워크 연결이 끊어진 경우 등 예외 상황에 대비하여 적절한 예외 처리를 해주어야 한다. 예외를 적절히 처리하지 않으면 예외가 전파되어 프로그램의 안정성에 문제를 일으킬 수 있다.

자원의 한정성: 스트림은 자원을 사용하므로 한정된 자원을 효율적으로 관리해야 한다. 너무 많은 스트림을 동시에 열면 시스템 자원 부족으로 인한 성능 저하나 예상치 못한 동작 문제가 발생할 수 있다. 필요한 만큼의 스트림을 열고 사용하는 것이 중요하다.

스트림은 입출력 작업에 유용한 도구이지만, 위와 같은 주의사항을 준수하지 않으면 예기치 않은 문제가 발생할 수 있다. 따라서 스트림을 사용할 때는 문제를 방지하기 위해 신중하게 처리해야 한다.

 

728x90