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

ABAP New Syntax #1 - Inline Declaration

by SAPortal 2024. 2. 27.

목차

    1.Inline Declaration의 이해

    ABAP에서 데이터 타입이나 구조체, 내부 테이블을 선언할 때 일반적으로 DATA 문을 사용하여 변수를 먼저 선언한 후, 해당 변수에 값을 할당합니다.

    하지만 인라인 선언을 사용하면, 변수 선언과 초기화를 한 줄의 코드로 간단히 처리할 수 있습니다.

    이는 특히 데이터베이스에서 데이터를 읽어올 때 또는 메소드 호출의 결과를 저장할 때 매우 유용합니다.

     

    2.Inline Declaration 사용 예제

    예제1) 변수선언에서의 Inline Declaration

    DATA(LV_STRING) = 'HELLO WORLD'.

     

    LV_STRING라는 이름의 새로운 변수를 선언하고 'HELLO WORLD'로 초기화 합니다.

    이경우 변수의 타입은 자동으로 결정되고 초기화 값에 따라 변수타입이 결정됩니다.

     

     

    예제2) SELECT문에서의 Inline Declaration

    SELECT * 
      FROM SFLIGHT 
      INTO TABLE @DATA(LT_SFLIGHT) 
     WHERE CARRID = 'LH' 
       AND CONNID = '0400' 
       AND FLDATE = '20230815'.
       
    CL_DEMO_OUTPUT=>DISPLAY( LT_SFLIGHT ).

     

    이 예제에서 @DATA(LT_SFLIGHT)SFLIGHT 테이블로부터 데이터를 읽어오며 동시에 LT_SFLIGHT라는 이름의 INTERNAL TABLE을 생성합니다.

    이 INTERNAL TABLE은 SFLIGHT의 모든필드를 참조하여 선언됩니다.

     

     

    예제3) LOOP문에서의 Inline Declaration

    LOOP AT LT_SFLIGHT INTO @DATA(LS_SFLIGHT).
      WRITE: / LS_SFLIGHT-CARRID, LS_SFLIGHT-CONNID, LS_SFLIGHT-FLDATE.
    ENDLOOP.

     

    LOOP문 내에서 @DATA(LS_SFLIGHT)를 사용하여 현재 처리 중인 행을 저장하기 위한 WORK AREA를 인라인으로 선언하여 사용할 수 있습니다.

    이 WORK AREA는 LOOP문의 INTERNAL TABLE의 모든 필드를 참조하여 선언됩니다.

     

     

    예제4) READ문에서의 Inline Declaration

    READ TABLE LT_SFLIGHT INTO @DATA(LS_SFLIGHT) WITH KEY CARRID = 'LH'.
    IF SY-SUBRC = 0.
      WRITE: / LS_SFLIGHT-CARRID, LS_SFLIGHT-CONNID, LS_SFLIGHT-FLDATE.
    ENDIF.

     

    LOOP문과 마찬가지로 READ문 내에서 @DATA(LS_SFLIGHT)를 사용하여 현재 처리 중인 행을 저장하기 위한 WORK AREA를 인라인으로 선언하여 사용할 수 있습니다.

    이 WORK AREA는 READ문의 INTERNAL TABLE의 모든 필드를 참조하여 선언됩니다.

     

     

    예제5) 메소드 호출결과의 Inline Declaration

    DATA(LO_MY_CLASS) = NEW #( ).
    LO_MY_CLASS->GET_DATA( IMPORTING E_DATA = @DATA(MY_DATA) ).
    
    WRITE: / MY_DATA.

     

    여기서 @DATA(MY_DATA)는 GET_DATA 메소드에서 반환된 데이터를 저장하기 위해 선언과 동시에 대입하였습니다.

    이때의 변수 MY_DATA의 타입은 GET_DATA 메소드의 반환타입과 동일하게 생성됩니다.

     

     

    예제6) Field-Symbol사용에서의 Inline Declaration

    LOOP AT LT_SFLIGHT ASSIGNING FIELD-SYMBOL(<FS_SFLIGHT>).
      WRITE: / <FS_SFLIGHT>-CARRID, <FS_SFLIGHT>-CONNID, <FS_SFLIGHT>-FLDATE.
    ENDLOOP.

     

    LOOP문 내에서 ASSIGNING FIELD-SYMBOL(<FS_SFLIGHT>)을 사용하여 현재 처리 중인 행을 저장하기 위한 WORK AREA를 인라인으로 선언하여 사용할 수 있습니다.

    이 FIELD-SYMBOL은 LOOP문의 INTERNAL TABLE의 모든 필드를 참조하여 선언됩니다.

     

     

    3.장점

    코드 간결성: Inline Declaration을 사용하면 코드의 양을 줄일 수 있으며, 선언부와 사용부가 분리되어 있지 않아 코드의 가독성이 향상됩니다.

    개발 효율성: 변수의 타입을 미리 선언할 필요가 없으므로, 개발자는 비즈니스 로직 구현에 더 집중할 수 있습니다.

    유지 관리 용이: 데이터 타입이나 구조가 변경될 경우, 인라인 선언을 사용하면 해당 변경 사항을 더 쉽게 관리할 수 있습니다.