목차
1. Table Expression이란?
Table Expression은 내부 테이블이나 표준 테이블의 특정 행에 직접 접근할 수 있는 구문입니다.
이는 기존의 READ TABLE 문을 대체하는 현대적인 접근 방식으로, 개발자가 코드를 더 간결하고 읽기 쉽게
만들 수 있도록 돕습니다.
2. Table Expression 사용 예제
이해를 돕기위해 이전구문과 새로운 구문으로 나눠서 예문을 작성했습니다.
예제1) INTERNAL TABLE READ
[OLD]
READ TABLE LT_ITAB INTO LS_ITAB INDEX 1.
IF SY-SUBRC = 0.
LV_CARRID = LS_ITAB-CARRID.
ENDIF.
[NEW]
DATA(LS_ITAB) = LT_ITAB[ 1 ].
DATA(LV_CARRID) = LT_ITAB[ 1 ]-CARRID.
INTERNAL TABLE에 INDEX로 접근할때 LT_ITAB[ 1 ]이런식으로 접근이 가능합니다.
필드를 지정안하면 구조 전체를 읽을수 있고 LT_ITAB[ 1 ]-CARRID 처럼 특정 필드를 지정할 수도 있습니다.
[OLD]
READ TABLE LT_ITAB INTO LS_ITAB WITH KEY CARRID = 'LH'.
IF SY-SUBRC = 0.
LV_CARRID = LS_ITAB-CARRID.
ENDIF.
[NEW]
DATA(LS_ITAB) = LT_ITAB[ CARRID = 'LH' ].
DATA(LV_CARRID) = LT_ITAB[ CARRID = 'LH' ]-CARRID.
Internal Table에 특정 조건으로 접근할때 LT_ITAB[ CARRID = 'LH' ]이런식으로 접근이 가능합니다.
마찬가지로 필드를 지정안하면 구조 전체를 읽을수 있고 LT_ITAB[ CARRID = 'LH' ]-CARRID 처럼 특정 필드를
지정할 수도 있습니다.
예제2) BINARY SEARCH
[OLD]
DATA : LT_ITAB TYPE TABLE OF SFLIGHT,
LS_ITAB TYPE SFLIGHT.
SORT LT_ITAB BY CARRID.
READ TABLE LT_ITAB INTO LS_ITAB WITH KEY CARRID = 'LH' BINARY SEARCH.
[NEW]
DATA : LT_ITAB TYPE SORTED TABLE OF SFLIGHT WITH NON-UNIQUE KEY CARRID.
DATA(LS_ITAB) = LT_ITAB[ CARRID = 'LH' ].
일반적인 Internal Table을 READ할때 BINARY SEARCH를 사용하기위해 READ하는 기준으로 SORT구문이
필요한 것처럼 Table Expression에서는 위 예시처럼 Sorted Table을 선언하여 사용해야 합니다.
예제3) LINE_EXISTS
[OLD]
READ TABLE LT_ITAB INTO LS_ITAB INDEX 1 TRANSPORTING NO FIELDS.
IF SY-SUBRC = 0.
ENDIF.
[NEW]
IF LINE_EXISTS( LT_ITAB[ 1 ] ).
ENDIF.
LINE_EXISTS 함수는 Internal Table에서 특정 조건을 만족하는 행이 존재하는지 여부를 판단하는 데 사용됩니다.
기존의 READ TABLE 구문을 사용한 후 sy-subrc 값을 체크하는 방식보다 훨씬 간결하고 읽기 쉽습니다.
예제4) LINE_INDEX
[OLD]
READ TABLE LT_ITAB INTO LS_ITAB WITH KEY CARRID = 'LH' TRANSPORTING NO FIELDS.
IF SY-SUBRC = 0.
LV_INDEX = SY-TABIX.
ENDIF.
[NEW]
DATA(LV_INDEX) = LINE_INDEX( LT_ITAB[ CARRID = 'LH' ] ).
LINE_INDEX 함수는 Internal Table에서 주어진 조건을 만족하는 첫 번째 행의 인덱스를 반환합니다.
이 함수는 특정 조건에 일치하는 행이 테이블 내 어디에 위치하는지 알고 싶을 때 유용하며, LINE_EXISTS 함수와 유사하게 테이블의 특정 데이터를 검색하는 데 사용됩니다.
하지만 LINE_EXISTS가 단순히 해당 데이터의 존재 여부만을 판별하는 데 반해, LINE_INDEX는 해당 데이터의 위치(인덱스)까지 제공합니다.
예제5) OPTIONAL
DATA(LS_ITAB) = VALUE #( LT_ITAB[ 1 ] OPTIONAL ).
DATA(LV_CARRID) = VALUE #( LT_ITAB[ 1 ]-CARRID OPTIONAL ).
만약 LT_ITAB에 DATA가 없으면 "LT_ITAB[ 1 ]" 이 구문에서 덤프가 발생합니다. 위 예제와 같이 VALUE #연산자의 OPTIONAL을 사용하여 조건에 맞는 값이 없더라도 덤프가 발생하지 않도록 구현을 해야 합니다.
3. 장점
Table Expression은 ABAP 개발에서 데이터 처리를 보다 간결하고 효율적으로 만들어주는 강력한 도구입니다.
이를 통해 개발자는 코드의 가독성을 향상시키고, 애플리케이션의 성능을 최적화할 수 있습니다.
ABAP 개발 환경에서 Table Expression의 활용은 개발 프로세스를 한 단계 업그레이드할 수 있는 기회를 제공합니다.