ABAP

CASE문 없이 SWITCH 한 줄로 — ABAP 분기 표현식 #shorts #SAP #ABAP

▶ YouTube에서 보기

이 글에서 다룰 것

ABAP에서 단순한 분기 로직을 처리할 때 CASE ... ENDCASE 명령문은 행 수가 많아지고, 결과 값을 변수에 담으려면 매번 WHEN마다 대입문을 써야 합니다. ABAP 7.40 SP08부터 도입된 SWITCH 표현식을 활용하면 한 줄로 값을 반환하고, 인라인 선언(DATA(...))과도 자연스럽게 결합됩니다.

이 글을 보기 전에

ABAP 7.40 이상의 인라인 데이터 선언(DATA(...)), 문자열 템플릿, CASE/IF 등 기본 제어문에 익숙하다면 충분합니다.

사전 가정 — 환경과 버전

  • ABAP 릴리스: 7.40 SP08 이상
  • SAP S/4HANA 2022 또는 NetWeaver 7.55+
  • 개발 도구: ADT for Eclipse 또는 SE80

핵심 한 줄

SWITCH는 "분기 결과를 값으로 돌려주는" 표현식이고, CASE는 "분기마다 다른 일을 시키는" 명령문이다.

핵심 개념 — 명령문 vs 표현식

" CASE: 명령문 — 변수에 값을 직접 대입
DATA lv_label TYPE string.
CASE iv_type.
  WHEN 'A'. lv_label = '주문'.
  WHEN 'B'. lv_label = '견적'.
  WHEN OTHERS. lv_label = '기타'.
ENDCASE.

" SWITCH: 표현식 — 인라인 선언과 결합 가능
DATA(lv_label2) = SWITCH string( iv_type
                    WHEN 'A' THEN '주문'
                    WHEN 'B' THEN '견적'
                    ELSE '기타' ).

실전 코드 1단계 — 오더 타입 라벨링

METHOD get_label.
  rv_label = SWITCH string( iv_auart
               WHEN 'TA'   THEN '표준 주문'
               WHEN 'OR'   THEN '일반 판매'
               WHEN 'RE'   THEN '반품'
               WHEN 'CR'   THEN '대변 메모 요청'
               WHEN 'DR'   THEN '차변 메모 요청'
               ELSE             |미정의 유형: { iv_auart }| ).
ENDMETHOD.

실전 코드 2단계 — THROW 통합

METHOD resolve.
  ro_strat = SWITCH #( iv_auart
               WHEN 'TA' THEN NEW lcl_standard_pricing( )
               WHEN 'RE' THEN NEW lcl_return_pricing( )
               WHEN 'CR' THEN NEW lcl_credit_pricing( )
               ELSE           THROW zcx_order_type( iv_auart = iv_auart ) ).
ENDMETHOD.

실전 코드 3단계 — SWITCH + COND 중첩

METHOD calc_discount_rate.
  rv_rate = SWITCH p_decfloat16( iv_auart
              WHEN 'TA' THEN COND #( WHEN iv_amount >= 1000000 THEN '0.05'
                                     WHEN iv_amount >= 500000  THEN '0.03'
                                     ELSE                           '0.00' )
              WHEN 'RE' THEN COND #( WHEN iv_amount >= 100000  THEN '0.10'
                                     ELSE                           '0.07' )
              WHEN 'CR' THEN '0.00'
              ELSE           THROW zcx_order_type( iv_auart = iv_auart ) ).
ENDMETHOD.

OTHERS/ELSE 생략 주의

ELSE 절을 생략하면 매칭 실패 시 초기값(빈 문자열·0)이 반환됩니다. 실무에서는 ELSE에 명시적 디폴트 또는 THROW를 두는 것을 권장합니다.

SWITCH vs COND 사용 기준

같은 변수의 값으로만 분기한다면 SWITCH, 여러 변수가 얽힌 논리식이라면 COND가 자연스럽습니다. 외곽은 SWITCH, 내부 조건은 COND 중첩 패턴이 실무에서 자주 등장합니다.

다음 단계 / 관련 주제

  • COND: 논리식 기반 분기 표현식
  • VALUE / NEW: 구조체·객체 인스턴스화 표현식
  • REDUCE / FOR: 함수형 집계·변환

참고 자료

  • SAP Help — SWITCH operator (abapcompute_switch)
  • SAP Help — COND operator (abapcompute_cond)
  • Clean ABAP Style Guide (github.com/SAP/styleguides)

댓글 0

아직 댓글이 없습니다.