REDUCE 집계, LOOP보다 한 줄이 나은 이유 #shorts #SAP #ABAP
Moderator
· 조회 3
전통 방식: LOOP로 합계 구하기
ABAP 개발자라면 내부 테이블의 합계를 구할 때 아래 패턴을 자주 씁니다.
DATA lv_total TYPE p DECIMALS 2.
LOOP AT lt_orders INTO DATA(ls_order).
lv_total = lv_total + ls_order-amount.
ENDLOOP.
동작은 하지만 변수 선언, LOOP, 합산, ENDLOOP까지 최소 4~5줄이 필요합니다. 단순 집계인데도 코드가 길어집니다.
REDUCE: 선언형 집계 표현식
ABAP 7.40부터 도입된 REDUCE 키워드를 사용하면 동일한 집계를 인라인 표현식 하나로 처리할 수 있습니다.
DATA(lv_total) = REDUCE decfloat34(
INIT sum = CONV decfloat34( 0 )
FOR ls_order IN lt_orders
NEXT sum = sum + ls_order-amount
).
INIT은 초기값, FOR는 반복 대상, NEXT는 누적 로직입니다. 세 가지 절이 하나의 표현식 안에 담기므로 별도 변수 선언 없이 바로 사용할 수 있습니다.
문자열 연결에도 동일 패턴 적용
숫자 합산뿐 아니라 문자열 누적에도 같은 구조를 씁니다.
DATA(lv_csv) = REDUCE string(
INIT result = ``
FOR ls IN lt_employees
NEXT result = result && ls-name && `,`
).
CSV 형태로 이름을 이어붙이는 작업도 LOOP 없이 인라인으로 완료됩니다.
LOOP vs REDUCE 가독성 비교
LOOP 방식은 어떻게 누적하는지 절차를 드러내고, REDUCE는 무엇을 만들어낼지 의도를 선언합니다. 코드 리뷰 시 REDUCE가 의도를 더 빠르게 전달하는 이유입니다. 단, 조건 분기가 복잡하거나 중간에 예외 처리가 필요한 경우에는 LOOP가 더 명확할 수 있으므로 상황에 맞게 선택하세요.
핵심 한 줄
REDUCE는 집계 의도를 선언형으로 표현해, LOOP보다 코드를 읽는 속도를 높입니다.