합계 5줄 → REDUCE 한 줄로 끝 #shorts #SAP #ABAP

Moderator · 조회 2

전통 LOOP, 너무 길지 않나요?

내부 테이블의 합계를 구하는 코드, 보통 이렇게 작성합니다. 변수 선언, 초기화, LOOP, 누적, ENDLOOP까지 다섯 줄 이상이 필요하죠.

DATA(lt_orders) = VALUE tt_orders(
  ( amount = 100 )
  ( amount = 250 )
  ( amount = 175 ) ).

DATA: lv_total TYPE i.
CLEAR lv_total.

LOOP AT lt_orders INTO DATA(ls_order).
  lv_total = lv_total + ls_order-amount.
ENDLOOP.

WRITE: / lv_total.

REDUCE 한 줄로 끝내기

ABAP 7.40 SP08부터 도입된 REDUCE 표현식을 쓰면 같은 로직을 선언적으로 표현할 수 있습니다. 초기값(INIT)과 누적식(NEXT)만 정의하면 끝입니다.

DATA(lv_total) = REDUCE i(
  INIT sum = 0
  FOR  ls_order IN lt_orders
  NEXT sum = sum + ls_order-amount ).

WRITE: / lv_total.

임시 변수도, CLEAR도, ENDLOOP도 없습니다. 결과 타입(i)을 명시하고 누적 변수 sum의 흐름만 보여주면 됩니다.

실무: 조건부 누적

특정 조건만 더하고 싶을 때도 WHERE로 한 번에 처리됩니다.

DATA(lv_vip_total) = REDUCE i(
  INIT s = 0
  FOR  ls IN lt_orders
       WHERE ( amount >= 200 )
  NEXT s = s + ls-amount ).

전통 LOOP였다면 IF ... ENDIF가 한 겹 더 들어갔을 코드입니다.

가독성 비교 포인트

주의: 복잡한 분기·로깅이 섞이면 오히려 LOOP가 명확합니다. 단순 집계·카운트·평균 계산에 REDUCE가 빛납니다.

핵심 한 줄

합계 5줄이 한 줄로 — REDUCE는 "어떻게"가 아니라 "무엇을"을 말하는 ABAP의 함수형 무기입니다.