ABAP

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

▶ YouTube에서 보기

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

Moderator · 2026. 5. 3. · 조회 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의 함수형 무기입니다.


본 게시글은 btpstacks.com의 독립 학습 콘텐츠이며 SAP SE와 무관합니다. 공식 문서는 help.sap.com을 참고하세요.

SAP, ABAP, SAP BTP, SAPUI5, SAP Fiori는 독일 및 기타 국가에서 SAP SE의 상표 또는 등록상표입니다.

댓글 0

아직 댓글이 없습니다.