본문 바로가기
카테고리 없음

ABAP New Syntax #2 - Table Expression

by SAPortal 2024. 2. 27.

목차

    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는 해당 데이터의 위치(인덱스)까지 제공합니다.

     

     

     

    3. 장점

    Table Expression은 ABAP 개발에서 데이터 처리를 보다 간결하고 효율적으로 만들어주는 강력한 도구입니다.

    이를 통해 개발자는 코드의 가독성을 향상시키고, 애플리케이션의 성능을 최적화할 수 있습니다.

    ABAP 개발 환경에서 Table Expression의 활용은 개발 프로세스를 한 단계 업그레이드할 수 있는 기회를 제공합니다.