생성자 표현식 ② COND, SWITCH, FILTER, FOR, REDUCE
3줄 요약
COND는IF처럼 조건에 따라 값을 고르고,SWITCH는CASE처럼 한 변수의 값으로 고르며, 둘 다THROW로 예외를 던질 수 있어요.FILTER는 정렬/해시 키가 있는 테이블에서 키 조건으로 줄을 골라 새 테이블을 만들어요.FOR로 테이블을 반복해 줄을 만들고,REDUCE로 합계, 최대값, 문자열 합치기를 해요. 단,LOOP와 달리 디버깅은 어려워요.
어떤 상황에서 쓰나요
지난 회가 값을 "만드는" 표현식이었다면 이번 회는 값을 "고르고 걸러 내고 모으는" 표현식이에요. 보고서 코드에서 IF ... ELSE 로 문자열을 정하거나 LOOP 를 돌려 합계를 구하던 부분을 줄이는 데 써요.
핵심 내용
`COND` 와 `SWITCH`
COND:WHEN 논리식 THEN 값을 여러 번 쓰고ELSE로 마무리해요.ELSE가 없고 어느 조건도 참이 아니면 결과는 타입의 초기값이에요.THEN뒤의 값은 모두 결과 타입으로 변환할 수 있어야 해요.SWITCH: 한 변수의 값으로 가려요(SWITCH #( operator WHEN '+' THEN ... WHEN '-' THEN ... ELSE ... )).CASE와 같은 용도예요.LET: 표현식 안에서만 쓰는 보조 변수를LET time = ... IN으로 정의해요. 한 번 계산한 값을 여러WHEN에서 써요.THROW: 조건에 따라 예외를 던져요. 예를 들어 두 값이 모두 0일 때ELSE THROW cx_sy_zerodivide( )처럼요.RESUMABLE도 쓸 수 있어요.
DATA(day_or_night) = COND #( WHEN cl_abap_context_info=>get_system_time( ) BETWEEN '050000' AND '220000'
THEN `day`
ELSE `night` ).`FILTER` — 기존 내부 테이블에서 조건에 맞는 줄로 새 테이블을 만들어요. 전제는 이래요.
소스 테이블에 정렬 키나 해시 키가 있어야 해요. 기본 키가 그렇지 않으면 보조 키를
USING KEY로 써요.조건은 키 컴포넌트를 단일 값과 비교해요. 해시 키는
=만, 정렬 키는=,<>,<,>,<=,>=이고,IS [NOT] INITIAL도 돼요. 여러 조건은AND로만 묶고NOT,OR는 안 돼요.필터 테이블(다른 테이블의 키 값으로 거르기)도 쓸 수 있어요.
EXCEPT를 붙이면 조건에 맞지 않는 줄을 가져와요.
`FOR` (반복 표현식) — VALUE, NEW, REDUCE 안에서 쓰는 반복이에요. 테이블 반복(FOR wa IN itab, LOOP AT 과 같은 의미)과 조건 반복(UNTIL, WHILE)이 있어요. 반복 변수는 표현식 안에서만 보이고, 타입은 IN 의 테이블이 정해요.
DATA(it1) = VALUE itab_type( FOR wa IN itab
( col1 = wa-col1 && 'z' col2 = wa-col2 + 1 ) ).INDEX INTO n 으로 sy-tabix 같은 줄 번호를 받을 수 있고, FOR 뒤의 LET 은 반복마다 계산돼요. 치트시트는 LOOP 문과 달리 이 순차 처리는 디버깅할 수 없다고 짚어요.
`REDUCE` — 반복해서 하나의 값(또는 테이블)을 만들어요. 구성은 INIT 초기값 → FOR 반복 → NEXT 갱신이에요.
DATA(sum_val) = REDUCE i( INIT len = 0
FOR <line> IN itab
NEXT len = len + <line>-col2 ).합계 말고도 가장 긴 문자열 찾기, 최대값 찾기, VALUE #( BASE ... ) 로 테이블 만들기 예제가 나와요. INIT 에 변수를 여러 개 두면 첫 번째가 결과이고 나머지는 NEXT 에서 보조로 써요.
주의할 점
이 표현식들은 짧아지는 대신 읽기가 어려워질 수 있어요. 치트시트도 "가독성, 유지보수, 디버깅 용이성을 같이 보라"고 말해요. 반복 로직이 복잡하면
LOOP AT이 나을 수 있어요.FILTER의WHERE는 키 컴포넌트만 비교할 수 있다는 제약이 있어서,LOOP AT ... WHERE처럼 아무 칼럼으로나 거를 수는 없어요.치트시트는 계속 갱신되는 문서예요. 첫 공개는 2022년이고, 제가 읽은 판은 2026년 10월 기준이에요. 이 글은 읽고 정리한 것이고 예제를 직접 실행해 보지는 않았어요.
원문 주소: https://github.com/SAP-samples/abap-cheat-sheets/blob/main/05_Constructor_Expressions.md#cond
출처와 이용 안내
원문: ABAP Cheat Sheets - Constructor Expressions COND, SWITCH, FILTER, LET, FOR, REDUCE · 작성자 SAP SE and contributors SAP-samples · 작성일 2022-12-05 · 기준 릴리스에 따라 다름 원문은 최신 ABAP 기준 · 확인일 2026-10-25
이 글은 위 원문을 읽고 한국어로 요약·재구성한 글이며 번역본이 아니에요. 원문의 저작권은 작성자와 SAP에 있어요.
원문은 Apache-2.0 라이선스(https://www.apache.org/licenses/LICENSE-2.0)로 공개된 자료예요. 이 글은 내용을 한국어로 줄이고 순서를 바꾼 변경본이며, 원저작자가 이 글을 보증하지 않아요.
설정과 화면은 릴리스마다 달라요. 적용하기 전에 원문과 SAP Help Portal, 관련 SAP Note에서 최신 내용을 확인해 주세요.
SAP와 SAP 제품명은 SAP SE의 상표예요. 바로투입은 SAP와 관련이 없어요.
댓글 0
아직 댓글이 없어요.
로그인하고 댓글 쓰기