본문 바로가기

ABAP 프로그래밍 개념/ABAP Structue and Internal Table

5.1.2 Local Structures

ABAP 프로그램에서 구조체를 정의하는 다양한 방법을 이해하기 위해 테이블 SFLIGHT의 예를 살펴보겠습니다. 구조체를 정의하는 방법을 이해한 후에는 구조체를 사용하여 데이터베이스 테이블에서 데이터를 처리할 수 있습니다.

*TYPES 키워드 뒤에는 Chain Operator인 콜론(:)이 와야합니다.
TYPES : BEGIN OF ty_sflight,
         CARRID TYPE S_CARR_ID,
         CONNID TYPE S_CONN_ID,
         FLDATE TYPE S_DATE,
        END OF ty_sflight.
        
TYPES 키워드로 Data Type을 만들었으므로, 이를 이용해서 Data Object를 정의 가능        
DATA st_sflight TYPE ty_sflight.

*동일한 Structure Type은 Elementary Type을 참조하면서도 선언할 수 있습니다. 
*각 필드의 유형과 길이가 테이블의 필드와 일치하도록하는 것이 Elementary Type을 사용할 때 매우 중요합니다.

TYPES : BEGIN OF ty_sflight1,
         CARRID TYPE C LENGTH 3,
         CONNID TYPE N LENGTH 4,
         FLDATE TYPE D,
        END OF ty_sflight1.

위 코드는 TYPES 키워드를 사용하여 구조체 데이터 타입을 정의합니다. 이 구조체에는 테이블 SFLIGHT의 세 개의 필드가 포함되어 있습니다. 데이터베이스 테이블에서 특정 필드의 데이터를 처리하려는 경우, 해당 필드를 포함하는 구조체를 정의하는 것이 유용합니다. 구조체의 모든 필드는 데이터베이스 테이블의 해당 필드와 같은 기술적 특성을 가져야 합니다.

이를 보장하기 위해 프로그램에서 구조 요소를 데이터베이스 테이블의 해당 필드와 동일한 데이터 요소로 참조하십시오. 예를 들어, CARRID TYPE S_CARR_ID와 같이 말입니다.

여기서, S_CARR_ID는 테이블 SFLIGHT의 CARRID 필드가 참조하는 데이터 요소입니다. 또한 구조체의 구성 요소를 테이블 필드에 대한 참조를 사용하여 참조할 수도 있습니다. 예를 들어, CARRID TYPE SFLIGHT-CARRID와 같이 말이죠. 데이터 요소나 테이블 필드에 대한 필드 참조를 사용하면 데이터 요소나 테이블 필드의 정의에 대한 변경 사항이 프로그램에 자동으로 반영되도록 보장할 수 있습니다.

리스팅 5.2에서 우리는 CARRID, CONNID 및 FLDATE를 구성 요소로 사용하여 TYPES 키워드를 사용하여 구조체 타입 TY_SFLIGHT를 정의했습니다. 우리는 구조체 타입의 구성 요소를 각각의 데이터 요소에 참조했습니다. 또한 TY_SFLIGHT 구조체 타입을 참조하는 DATA 키워드를 사용하여 구조체 ST_FLIGHT를 정의했습니다. TY_SFLIGHT1 구조체 타입 선언 예제에서는 구조체 타입의 구성 요소에 기본 유형을 사용합니다.

아래 예시는, ABAP Data Dictionary Table에 매칭되는 Strucutre Type을 선언하는 것 입니다.

TYPES : ty_sflight TYPE sflight.

테이블의 모든 필드를 가지는 Structure을 정의하기 위해서는, 간단하게 Structure Type에서 TABLE을 언급해주면 됩니다. 예시를 보면, ty_sflight는 ABAP DATA Dictionary에서 SFLIGHT가 가지는 14개 필드를 가질 것입니다.

아래 예시는 nested structure의 예시입니다.

TYPES : ty_sflight TYPE sflight.
TYPES : BEGIN OF ty_trip,
         name TYPE name1,
         flight TYPE ty_sflight,
        END OF ty_trip.

위 예시를 보면, Structure Type인 TY_SFLIGHT는 Transparent Table인 SFLIGHT를 참조하며 만들었습니다. 또한 Nested Structure Type인 TY_TRIP은 NAME이라는 Component와 Structure Type인 FLIGHT를 Component로 구성되어 있습니다.

아래 예시는, Structure을 DATA라는 키워드를 통해 Data Object로 만드는 예시입니다. Syntax는 TYPES 키워드와 유사합니다.

DATA : BEGIN OF st_sflight,
        CARRID TYPE S_CARR_ID,
        CONNID TYPE S_CONN_ID,
        FLDATE TYPE S_DATE,
       END OF st_sflight.
       
DATA st_sflight1 TYPE sflight.

Structure인 ST_SFLIGHTS는 CARRID, CONNID, FLDATE라는 세 개의 Components로 구성되어 있습니다. 반면, Structure인 ST_SFLIGHT1은 ABAP Data Dictionary에서 SFLIGHT라는 테이블의 모든 필드를 Components로 가집니다.

반응형