SAP/ABAP 기초

(ABAP) Data Type과 Data Object

haramang 2021. 6. 13. 10:46

1. Data Type

- Data Type 은 데이터 객체를 만들기 위한 틀이며 메모리를 사용하지 않는다.

 

- Data Type의 종류

    > ABAP Predefined Type

       ABAP 뿐만이 아니라 다른 프로그래밍 언어에서도 사용되는 기본 Type

   

    > 프로그램 내에서 정의된 Type

       아래의 선언방법 예시처럼 프로그래머가 직접 정의한 type

 

    > ABAP Dictionary에서 정의된 Type

       ABAP Dictionary ( T-Code 'SE11') 에서 정의된 Type. 이 곳에서 정의된 Type들은 Global 하게 사용이 가능

 

- Data Type 선언 방법

Using Predefined Types
TYPES: T_CHAR TYPE C LENGTH 10,
         T_INT TYPE I,
         T_PACKED TYPE P.

Structured Types
TYPES: BEGIN OF TEST_TYPE,
         FIRST_NAME TYPE LENGTH 30,       
         LAST_NAME TYPE LENGTH 30,
         AGE TYPE I,
         END OF TEST_TYPE.

Table Types
TYPES SPFLI_SORT TYPE SORTED TABLE OF SPFLI WITH UNIQUE KEY CARRID CONNID.
* UNIQUE KEY: UNIQUE한 값을 갖는 필드. 즉 CARRID와 CONNID의 값은 중복되지 않는다.

               

2. Data Object

- Data Object는 Data Type으로 정의된 객체이며, Data Type에서 지정된 크키만큼 메모리를 사용한다.

 

- Data Object 종류

  • 필드(Field) - 단일 값을 가진 형태, Variable이라고도 불림.
  • 구조체(Structure) - 여러 필드의 집합으로 만들어진 1차원 형태.
  • 인터널 테이블(Internal Table) - Program내에서 정의되는 가상의 테이블.

- Data Object 선언 방법

CONSTANTS
CONSTANTS T_PACKED TYPE P LENGTH 8 DECIMALS 4 VALUES '5.1234'.


Tables
TABLES: BKPF.


FIELD SYMBOLS
* 김병철 멘토님이 주신 코드.
* SFLIGHT에 있는 데이터를 ITAB_05라는 Internal Table로 저장.
SELECT * INTO TABLE @DATA(ITAB_05) FROM SFLIGHT
DATA FIELD TYPE STRING VALUE 'FLDATE'.

* FIELD SYMBOL 정의
FIELD-SYMBOLS <FS_TAB> TYPE ANY TABLE,    " TABLE
                       <FS_WA> TYPE ANY.            " WORK AREA

* ITAB_05에 있는 데이터를 <FS_TAB>에 저장
ASSIGN ITAB_05 TO <FS_TAB>.

* FS_TAB에서 FIELD(FLDATE)가 '20140319'인 데이터를 찾아서 FS_VAL이라는 WORK AREA에 저장함.
READ TABLE <FS_TAB> ASSIGNING FIELD-SYMBOL(<FS_VAL>) WITH KEY (FIELD) = '20140319'.

* SY-SUBRC로 에러 체크. 0이면 OK, 다른 숫자이면 이전에 실행했던 코드에 문제가 있음.
IF SY-SUBRC = 0.
  BREAK-POINT.
ENDIF.

* FIELD SYMBOL이란?
  ABAP 프로그램 내에서 변수에 동적인 접근이 가능하게 하고 메모리 공간을 점유하지 않는다. FIELD SYMBOL의
  이름과 속성은 실행 시점(RUNTIME)에서 결정되며 모든 Data Object에 지정될 수 있다. Type을 명시하여 선언
  하거나 명시하지 않고 선언 가능하다. Type이 선언되지 않을 경우, 할당되는 필드(Data Object)의 타입을 그대
  로 상속 받는다.

Using Predefined Types
DATA: T_STR TYPE CHAR LENGTH 10 VALUE 'TEST',
         T_INT TYPE INT VALUE 14,
         T_PACKED TYPE P LENGTH 6 DECIMALS 2 VALUE '45.21'.
* VALUE는 기본값을 지정할 때 사용하며, LENGTH는 필드의 길이, DECIMALS 은 소수점 자리수를 지정할 때 사용.

Reference to Existing Types
DATA : LS_FLIGHT TYPE TY_FLIGHT, 
          LS_FLIGHT LIKE TY_FLIGHT,
          LT_FLIGHT TYPE TABLE OF TY_FLIGHT.         "Internal table 선언 - 기본타입은 standard table.
* TYPE과 LIKE의 차이
  TYPE은 Domain을 직접 참조하지만, LIKE는 미리 선언된 Data Object와 동일한 Data Object를 사용하며 선언된

  필드의 Domain을 참조함. LIKE 구문은 Obsolete syntax로 구분되어져 쓰지 않을 것을 권유한다고 한다.