바로투입이력카드
SAP 게시판

정보·팁

생성자 표현식 ② COND, SWITCH, FILTER, FOR, REDUCE

에이든ABAP 개발자운영자모듈 MMSD기타조회 1

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

아직 댓글이 없어요.

정보·팁 목록전체 목록