1. Question

쇼트서킷(short circuiting)이란 무엇인가?

2. Answer

Java에서 쇼트서킷(short-circuiting)은 주로 Stream API에서 사용되는 개념으로, 전체 데이터 세트를 처리하지 않고도 연산을 완료할 수 있는 기능을 의미한다. 즉, 스트림의 모든 요소를 처리하지 않고도 목표를 달성할 수 있을 때, 연산이 조기에 종료된다. 이는 성능 최적화 측면에서 매우 유용하며, 불필요한 계산을 줄여준다.

3. Detail

A. 사용 예시 - anyMatch

anyMatch는 스트림의 어떤 요소라도 주어진 조건과 일치하면 true를 반환하고 연산을 즉시 종료한다. 전체 스트림을 처리할 필요가 없다.

boolean result = stream.anyMatch(element -> elements.contains("target"));

B. 사용 예시 - findAny

findAny는 스트림에서 조건을 만족하는 첫 번째 요소(정확히는 ‘어떤’ 요소)를 찾으면 즉시 반환한다. 병렬 스트림에서는 성능 최적화를 위해 처음 발견되는 요소를 반환할 수 있다. 전체 스트림을 순회할 필요가 없다.

Optional<String> result = stream.filter(element -> element.contains("target")).findAny();

C. 사용 예시 - findFirst

findFirst는 스트림에서 조건을 만족하는 ‘첫 번째’ 요소를 찾으면 즉시 반환한다. 순차 스트림에서는 첫 번째 요소가 명확하지만, 병렬 스트림에서는 전체 스트림을 어느 정도 순회할 필요가 있을 수 있어, findAny보다 비용이 더 들 수 있다.

Optional<String> result = stream.filter(element -> element.contains("target")).findFirst();

D. 사용 예시 - limit

limit는 스트림의 요소 개수를 제한한다. 지정된 개수만큼의 요소가 처리되면 나머지 요소는 무시된다.

List<String> result = stream.limit(5).collect(toList());

E. 쇼트서킷의 장점

  • 성능 최적화: 전체 데이터를 처리하지 않고도 결과를 얻을 수 있어, 불필요한 연산을 줄이고 성능을 향상시킨다.

  • 무한 스트림 처리: 쇼트서킷 연산은 무한 스트림(infinite streams)에서도 안전하게 사용될 수 있으며, 무한한 요소를 가진 스트림에서도 유한한 결과를 얻을 수 있게 해준다.

4. Reference

None

태그:

카테고리:

업데이트:

댓글남기기