Java Stream API 에서 peek 메서드 사용

2026. 1. 21. 23:45개발노트

인텔리제이에서 Stream 사용 중 peek를 사용하라고 추천해줬다.

 

예를 들면 아래와 같이 map을 사용하면 peek을 추천해주는데

 

인텔리제이에서 추천해주니 Replace하고 그냥 사용할 수 있지만 주석에 써있기로는 디버깅용으로 사용하라고 한다.

왜 추천한걸까? 디버깅이 필요해 보였나?

 

peek로 변경하면 아래와 같은 코드로 변경되는데 결과 값은 map을 사용했을 때와 같다.

.peek(u -> u.setName("New Name"))

 

결과 값이 같은데 왜 peek를 디버깅용에만 사용하라고 하는걸까?

 

주석 내용을 읽어보면 최종 연산 즉 Collect()나 toList() 가 이루어지지 않으면 peek는 실행되지 않으며

자바가 자체적으로 Stream 최적화를 진행할 때 불필요하다고 판단하면 peek 로직이 무시 될 수 있다고 한다.

마지막으로 병렬 스레드에서 peek가 언제 실행되는지 보장되지 않는다고 한다.

 

 

추천 코드도 다시 확인하자.