JDK 24에 스트림 게더러즈(Stream Gatherers) 기능이 새롭게 추가되었습니다. 🆕
JDK 24의 주요 변경 사항으로는 클래스 파일 API (JEP 484) 개선으로 Spring Boot AOT 기능에 영향을 미치며, 32비트 지원 제거 (Windows는 24부터, Linux는 Deprecated), 그리고 보안 관리자(Security Manager, JEP 486) 기능이 제거되었습니다. ⚙️
기존 스트림은 중간 연산(Intermediate Operations)과 최종 연산(Terminal Operations)으로 구성되며, 최종 연산에는 유연한 Collectors가 있지만, 중간 연산에는 커스텀 확장이 어려웠습니다. ↔️
게더러(Gatherer)는 이러한 중간 연산의 확장 지점 필요성에서 탄생했으며, Collectors와 유사한 유연성을 제공하여 복잡한 스트림 조작을 간결하게 처리할 수 있게 합니다. ✨
게더러가 없던 기존 방식으로는 문자열 길이 기반 중복 제거, 고정/슬라이딩 윈도우 기반 그룹화 등 복잡한 중간 처리를 위해 별도의 객체 생성, equals/hashCode 오버라이드, 또는 최종 연산에서만 처리해야 하는 불편함이 있었습니다. 🚧
게더러는 Gatherers.sliding()과 같은 유틸리티 메서드를 통해 스트림 요소를 특정 크기의 슬라이딩 윈도우로 묶어 중간 단계에서 처리할 수 있게 하여, 이전 요소와의 비교 등 상태를 관리하는 로직을 간결하게 구현할 수 있습니다. 🪟
예시로, 냉동 창고 센서 데이터에서 5초 이내 30도 이상 온도 변화 감지 로직을 게더러를 사용하면 for 루프와 임시 상태 변수 없이 스트림 파이프라인 내에서 선언적으로 구현할 수 있어 코드의 가독성과 유지보수성이 향상됩니다. 🌡️
Gatherers.fixed(n)는 겹치지 않는 고정 크기 윈도우를, Gatherers.sliding(n)는 겹치는 슬라이딩 윈도우를 생성하며, 사용 목적에 따라 적절한 게더러를 선택할 수 있습니다. 📏
게더러는 JDK 24부터 적용되는 기능으로, 실무에 본격적으로 활용되기까지는 시간이 걸릴 수 있습니다. ⏳