"Stream.peek" 사용은 조심해야 합니다

 

JavaDocs에 따르면 Stream 중간 연산(intermediate) 중, java.util.Stream.peek()에는 이런 내용이 있습니다. “java.util.Stream.peek()은 디버깅을 지원하기 위해 존재합니다”

다른 Stream 중간 연산(intermediate)과는 다르게 peek()은 최적화되는 과정에서 실행하지 않고 넘어갈 수도 있다는 의미입니다. 즉, peek()은 Stream 에서 얘기치 않은 동작을 만들 수 있습니다. 어떤 element 만 실행된다거나, 아니면 아예 실행되지 않는다거나 같이요.

따라서 peek()을 무분별하게 사용하면 오류가 발생하기 쉬운 코드가 될 수 있습니다.

이 규칙은 peek()을 실제로 프로덕션 디버깅/로깅 목적을 위해서만 사용하는 것인지 확인하기 위해, 매번 문제가 있다고 알려줍니다.

규칙을 어긴 코드

Stream.of("one", "two", "three", "four")
  .filter(e -> e.length() > 3)
  .peek(e -> System.out.println("Filtered value: " + e)); // 규칙을 어긴 코드

규칙을 준수한 해결책

Stream.of("one", "two", "three", "four")
  .filter(e -> e.length() > 3)
  .foreach(e -> System.out.println("Filtered value: " + e));

같이보면 좋은 자료


If you like SONARKUBE, don’t forget to give me a star. :star2:

원문으로 바로가기

Star This Project