[ABAP] 모던 문법 실전 — FILTER, REDUCE, VALUE로 코드 줄이기
AI News
· 조회 1
![[ABAP] 모던 문법 실전 — FILTER, REDUCE, VALUE로 코드 줄이기](https://btpstacks.com/uploads/9b6cde97-0efe-4a5d-aad0-3a231f957cef.png)
개요
ABAP 7.40 이후 도입된 VALUE, FILTER, REDUCE 연산자는 Internal Table 처리를 혁신적으로 간결하게 만들어줍니다. 기존에 10줄 이상 걸리던 테이블 초기화, 필터링, 집계를 1~3줄로 줄일 수 있습니다. S/4HANA 및 BTP ABAP Cloud 환경에서 권장되는 모던 문법입니다.

핵심 개념
- VALUE #( ) — Internal Table이나 구조체를 인라인으로 초기화합니다.
APPEND를 반복할 필요 없이 한 번에 여러 행을 삽입합니다. - FILTER #( ) — Sorted/Hashed 테이블에서 키 기반 필터링을 수행합니다.
LOOP + IF + APPEND패턴을 한 줄로 대체합니다. 주의: Standard 테이블에는 사용할 수 없으며, USING KEY를 지정해야 합니다. - REDUCE — 테이블의 값을 반복하며 하나의 결과로 축약합니다. 합계, 카운트, 문자열 연결 등에 활용됩니다.
코드 예제
1. VALUE — 테이블 한 줄 초기화
* 클래식 방식 (7줄)
DATA: lt_cities TYPE TABLE OF string.
APPEND 'Seoul' TO lt_cities.
APPEND 'Tokyo' TO lt_cities.
APPEND 'Berlin' TO lt_cities.
* 모던 방식 (1줄)
DATA(lt_cities) = VALUE string_table( ( `Seoul` ) ( `Tokyo` ) ( `Berlin` ) ).
* 구조체 테이블 초기화
TYPES: BEGIN OF ty_flight,
carrid TYPE string,
connid TYPE string,
price TYPE p DECIMALS 2,
END OF ty_flight.
DATA(lt_flights) = VALUE ty_flight_tab(
( carrid = 'LH' connid = '400' price = '850.00' )
( carrid = 'AA' connid = '017' price = '650.00' )
( carrid = 'LH' connid = '401' price = '920.00' )
).
2. FILTER — 키 기반 필터링
* Sorted 테이블 + USING KEY로 필터링
TYPES ty_flight_sorted TYPE SORTED TABLE OF ty_flight
WITH NON-UNIQUE KEY carrid.
DATA(lt_sorted) = CORRESPONDING ty_flight_sorted( lt_flights ).
* LH 항공만 필터링 (한 줄!)
DATA(lt_lh_flights) = FILTER #( lt_sorted
USING KEY primary_key
WHERE carrid = 'LH' ).
* 결과: LH 400, LH 401 두 건만 남음
* 주의: Standard Table에는 FILTER 사용 불가!
3. REDUCE — 합계 계산
* 전체 항공편 가격 합계
DATA(lv_total) = REDUCE p DECIMALS 2(
INIT sum = CONV p DECIMALS 2( 0 )
FOR flight IN lt_flights
NEXT sum = sum + flight-price
).
* 결과: 2420.00
* 문자열 연결 (쉼표 구분)
DATA(lv_carriers) = REDUCE string(
INIT result = ``
FOR flight IN lt_flights
NEXT result = COND #(
WHEN result IS INITIAL THEN flight-carrid
ELSE result && `, ` && flight-carrid )
).
* 결과: "LH, AA, LH"
* 조건부 카운트
DATA(lv_expensive) = REDUCE i(
INIT count = 0
FOR fl IN lt_flights
NEXT count = COND #(
WHEN fl-price > 800 THEN count + 1
ELSE count )
).
* 결과: 2 (850, 920)
실무 팁
- FILTER 제한 — Standard Table에는 사용 불가합니다. Sorted 또는 Hashed Table로 변환하거나,
FOR ... IN ... WHERE구문을 대안으로 사용하세요:VALUE #( FOR fl IN lt_flights WHERE ( carrid = 'LH' ) ( fl ) ) - 성능 — FILTER는 키 기반이라 LOOP+IF보다 일반적으로 빠릅니다. 대용량(10만건+) 테이블에서는 Hashed Table + FILTER 조합이 권장됩니다.
- 가독성 — REDUCE가 복잡해지면 오히려 가독성이 떨어집니다. 3단계 이상의 중첩은 별도 메서드로 분리하세요.

참고 자료
- SAP Help: REDUCE — Reduction Operator 공식 문서
- SAP Help: FILTER — Filter Operator 공식 문서
- SAP Community: ABAP 7.5x Quick Reference — 모던 문법 종합 참조
- SAPLearners: FILTER Operator for Internal Tables — 실전 예제
- Discovering ABAP: Constructor Operators — VALUE/REDUCE/FILTER 심화
📌 본 게시물은 AI(Claude)가 공개된 자료를 기반으로 자동 생성한 콘텐츠입니다. 기술 내용의 정확성은 SAP 공식 문서 와 교차 확인하시기 바랍니다.
™ SAP, S/4HANA, ABAP, Fiori, SAP BTP 등은 SAP SE 또는 그 계열사의 등록 상표입니다. 본 사이트는 SAP SE 와 공식적인 관련이 없는 비공식 학습 자료 입니다.
📧 저작권 침해 / 오류 / 콘텐츠 신고: btpstacks.com 의 "문의" 메뉴를 이용해주세요.