합계 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는 "어떻게(How)", REDUCE는 "무엇을(What)"
- 변수 스코프: 누적 변수가 표현식 안에만 존재 → 부수효과 감소
- 한 줄 할당:
DATA(lv_total) = ...형태로 즉시 결과를 받음
주의: 복잡한 분기·로깅이 섞이면 오히려 LOOP가 명확합니다. 단순 집계·카운트·평균 계산에 REDUCE가 빛납니다.
핵심 한 줄
합계 5줄이 한 줄로 — REDUCE는 "어떻게"가 아니라 "무엇을"을 말하는 ABAP의 함수형 무기입니다.