스트림은 자바 8부터 도입된 기능으로, 데이터 처리를 간결하고 효율적으로 할 수 있도록 지원한다. 이를 적절히 활용하면 데이터 처리 작업을 더욱 쉽고 효율적으로 수행할 수 있다.
스트림은 연속된 데이터 처리, 지연 평가(Lazy evaluation), 파이프라인 처리, 병렬 처리, 스트림 연산, 외부 반복 숨김 등의 특징이 있다. 하지만 주의해서 사용해야 한다.
이유
리소스 누수: 스트림은 외부 리소스(파일, 네트워크 연결 등)와 관련될 수 있다. 스트림을 제대로 닫지 않으면 리소스 누수가 발생할 수 있다. 따라서, 스트림 사용 후에는 반드시 명시적으로 닫아야 한다. 예외 발생 여부와 관계없이 finally 블록이나 try-with-resources 문을 사용하여 스트림을 닫아야 한다.
버퍼링과 플러싱: 스트림은 데이터를 버퍼에 쌓아두고, 특정 기준에 따라 한 번에 전송하거나 출력한다. 버퍼링과 플러싱을 올바르게 처리하지 않으면 원하는 동작을 수행하지 못할 수 있다. 예를 들어, 버퍼를 플러시하지 않으면 출력 내용이 즉시 반영되지 않을 수 있다.
동기와 비동기 처리: 스트림은 동기적인 처리 방식과 비동기적인 처리 방식을 모두 지원할 수 있다. 동기적인 스트림은 데이터를 읽거나 쓸 때까지 블로킹되며, 비동기적인 스트림은 백그라운드에서 작업을 처리하고 완료될 때까지 대기하지 않는다. 스트림을 사용할 때 이러한 동기와 비동기 처리 방식을 제대로 이해하고 사용해야 한다.
예외 처리: 스트림 작업은 예외가 발생할 수 있다. 파일이 존재하지 않거나, 네트워크 연결이 끊어진 경우 등 예외 상황에 대비하여 적절한 예외 처리를 해주어야 한다. 예외를 적절히 처리하지 않으면 예외가 전파되어 프로그램의 안정성에 문제를 일으킬 수 있다.
자원의 한정성: 스트림은 자원을 사용하므로 한정된 자원을 효율적으로 관리해야 한다. 너무 많은 스트림을 동시에 열면 시스템 자원 부족으로 인한 성능 저하나 예상치 못한 동작 문제가 발생할 수 있다. 필요한 만큼의 스트림을 열고 사용하는 것이 중요하다.
스트림은 입출력 작업에 유용한 도구이지만, 위와 같은 주의사항을 준수하지 않으면 예기치 않은 문제가 발생할 수 있다. 따라서 스트림을 사용할 때는 문제를 방지하기 위해 신중하게 처리해야 한다.
'개발 > Java&Kotlin' 카테고리의 다른 글
[Java] 자바로 TDD 시작하기 (1) | 2023.07.20 |
---|---|
[Java] Null 대신 빈 컬렉션이나 배열을 리턴할 것 (0) | 2023.06.28 |
[Java] Array보다 List를 사용해야하는 이유 (0) | 2023.06.13 |
[Spring] @Modelattribute, @RequestBody 차이점 (1) | 2023.04.26 |
[Java] 클래스, 추상클래스, 인터페이스 차이 (0) | 2023.04.21 |