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

정보·팁

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

에이든ABAP 개발자운영자모듈 MMSD기타수정됨조회 9

3줄 요약

  • COND는 IF처럼 조건에 따라 값을 고르고, SWITCH는 CASE처럼 한 변수의 값으로 고르며, 둘 다 THROW로 예외를 던질 수 있어요.

  • FILTER는 정렬/해시 키가 있는 테이블에서 키 조건으로 줄을 골라 새 테이블을 만들어요.

  • FOR로 테이블을 반복해 줄을 만들고, REDUCE로 합계, 최대값, 문자열 합치기를 해요. 단, LOOP와 달리 디버깅은 어려워요.

어떤 상황에서 쓰나요

지난 글에서는 값을 만드는 생성자 표현식을 배웠어요. 이번에는 조건에 따라 값을 고르는 COND·SWITCH, 행을 거르는 FILTER, 반복하는 FOR, 결과를 누적하는 REDUCE를 알아봐요. 짧게 쓴 코드가 오히려 읽기 어려워지는 경우도 함께 살펴봐요.

조건으로 값을 고르고, 필요한 행만 거르고, 반복한 결과를 모으는 과정은 서로 구분할 수 있습니다. 아래 그림을 보며 각 표현식이 처리 과정의 어느 역할을 맡는지 연결해 보세요.

AI 설명 그림: 고르고 걸러서 모으기. 개념을 돕기 위한 이미지이며 실제 SAP 화면이 아닙니다.
AI 설명 그림: 고르고 걸러서 모으기. 개념을 돕기 위한 이미지이며 실제 SAP 화면이 아닙니다.

핵심 내용

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

아직 댓글이 없어요.

정보·팁 목록전체 목록