본문 바로가기
SAP/ABAP - Object

ABAP Study 006 : Data Type 및 선언

by Hkun 2023. 5. 17.
반응형

Abap에서 사용하는 Data Type과 선언에 대해서 알아보려고 합니다. 타 프로그램 언어와 특이하게 차이 나는 부분은 많이 없습니다. 내부적으로는 하지만 요즘 고차원 언어에 비해서는 세세하게 타입 선언을 해줘야 합니다. python보다는 c 쪽에 가깝다고 할 수 있습니다. New Abap syntax에 타입을 제외하고 사용하는 법이 있긴 하지만 기본부터 아는 것이 중요하기 때문에 오늘은 Data Type에 대해서 알아보겠습니다.

 

Data 선언

 

 

1. 제네릭 타입의 데이터의 선언 

기본적으로 프로그래밍에서 쓰이는 제네릭타입은 type과 length를 주게 되어 있고(전부는 아닙니다) 이미 기 만들어진 DataElement를 참조로 생성 할 수 있습니다. 

 

선언 방식은 아래와 같습니다. 기본적으로 type을 생략 할수 있는데 default는 char입니다. 

* 1. Cahr
DATA : LV_CHAR      TYPE C LENGTH 10,
       LV_CHAR2     TYPE CHAR10,
       LV_CHAR3(10) TYPE C,
       LV_CHAR4(10).

* 2. Numc
DATA : LV_NUMC      TYPE N LENGTH 10,
       LV_NUMC2     TYPE NUMC10,
       LV_NUMC3(10) TYPE N.

* 3. Int
DATA : LV_INT TYPE I.


* 4. X
DATA : LV_X      TYPE X LENGTH 10,
       LV_X2(10) TYPE X.


* 5. Date/time
DATA : LV_DATE TYPE D,
       LV_TIME TYPE T.


* 6. P (8자리가 default)
DATA : LV_P      TYPE P DECIMALS 3,
       LV_P2(10) TYPE P DECIMALS 3.

DATA : LV_P      TYPE P DECIMALS 3,
       LV_P2(10) TYPE P DECIMALS 3.

NUMC는 타 언어에는 생소하게 보일수 있는데 이는 [글자형 숫자]인데 문자는 또 넣지 못합니다. 이상한 타입이지만 글자에서 쓰는 concatenate 라든가 &&로 글자 합치기도 가능합니다. 그리고 기본적으로 숫자 앞에 0으로 채워지게 되어 있습니다. 이 타입 같은 경우에는 무조건 0이 포함되어야 한다거나 동적으로 사용 시에 유용하게 사용할 수 있습니다.

 

만약에 변수가 DATE_01 ~ DATE_30 가 있을때 필드심벌을 이용하여 동적으로 프로그램을 작성할 때 이 뒤에 오는 숫자 두 자리를 NUMC로 선언하여 do 30 times를 돌면서 index만 받아서 넣으도 자동으로 0이 붙기 때문에 해당 필드 이름으로 동적으로 사용 가능하게 해 줍니다. 문자형으로 사용되기 때문에 char와 자연스럽게 붙습니다.

 

CONSTANTS : LC_MONTH TYPE FIELDNAME VALUE 'DATE_'.
DATA : LV_DAY(2) TYPE N.

DO 30 TIMES.
  LV_DAY = SY-INDEX.

  DATA(LV_FIELD) = LC_MONTH && LV_DAY.

ENDDO.

 

그리고 P type은 타 언어의 Double, Oracle의 Number타입이라고 생각하시면 편합니다.

기본적으로 8자리를 Default로 가지고 있고 8자리지만 실제 쓰이는 자릿수는 8 * 2 - 1입니다.(decimal 도 있다면 decimal - )

기본적으로 내부에 소숫점 한자리를 가지고 있고 2배 많게 쓰이신다고 보시면 됩니다. ABAP내부에서 쓰는 금액, 수량, 그리고 DEC타입은 내부적으로 보면 전부 P타입으로 되어 있습니다. 

 

그리고 INT 타입은 타 언어와 동일하고 1,2,4바이트 구성이 있고 이름도 INT1, INT2, INT4로 구성되어 있습니다. 프로그램에서 I로 선언되면 기본적으로 10자리로 됩니다. 그리고 SIGN값으로 구성되어 있어서 -2,147,483,648 ~ 2,147,483,647 범위 내에서 사용가능합니다. 그래서 10자리로 앞자리가 9까지 채우고 싶다면 int 타입으로의 선언은 피하셔야 합니다. 

 

2. Structure, Table, DataElement의 선언

  - 기본적으로 se11로 인해서 생성되어 있는 항목들을 참조하여 데이터 선언을 할 수 있습니다.

  - Structure로 생성되어 있어도 프로그램 내부에서 TYPE TABLE OF로 내부에서 테이블 타입으로 사용 가능합니다. 

DATA : LS_USR02 TYPE USR02,
       LT_USR02 TYPE TABLE OF USR02.

DATA : BEGIN OF LT_USR02_T OCCURS 0.
         INCLUDE STRUCTURE USR02.
       DATA : END OF LT_USR02_T.

DATA : LT_FIELDCAT TYPE LVC_T_FCAT. "LVC_T_FCAT이 테이블 타입이라 type table 없이 테이블 타입

 

3. Object의 선언(Class)

기본적으로 Class의 경우에는 TYPE REF TO로 변수 선언 할 수 있습니다.

 

DATA : LO_ALV TYPE REF TO CL_GUI_ALV_GRID.

 

4. DATA, TYPES의 차이점 

 프로그램 내에서 실제로 Types는 밑그림만 그린 상태로 프로그램 내에서 변수로 사용하거나 할 수 없습니다. 무조건 DATA 명령어로 변수로 만들어져야 프로그램 내부에서 사용 가능합니다. DATA는 변수를 만들기 위한 명령어로 types로 만들 수 있는 모든 것들을 DATA로도 생성이 가능하고, Types 같은 경우는 complex structure는 허용이 안 되는 경우가 있는데 이 경우도 data로 선언하게 되면 만사 ok입니다.

TYPES : BEGIN OF STY_ITEM,
          MATNR TYPE MATNR,
          MAKTX TYPE MAKTX,
        END OF STY_ITEM,
        TTY_ITEM TYPE TABLE OF STY_ITEM.

DATA : BEGIN OF LT_DATA OCCURS 0,
         MATNR TYPE MATNR,
         MAKTX TYPE MAKTX,
         ITEM  TYPE TTY_ITEM,
       END OF LT_DATA.

 

5. TYPE, LIKE의 차이점 

많이 헷갈릴 수 있는 부분입니다. 간단하게 보면 TYPE은 모든 데이터를 구성할 수 있고 참조할 수 있습니다. 하지만 LIKE의 경우에는 se11에서 생성된 오브젝트들을 참조로 선언하는 것은 type과 비슷하나 프로그램 내에서 like를 쓸 때는 data로 선언된 애들을 참조해서 생성할 때만 사용 가능합니다.  타입으로 선언된 애들은 사용할 수 없습니다.

 

 

반응형

'SAP > ABAP - Object' 카테고리의 다른 글

ABAP Study 005 : Conversion Exit  (0) 2022.11.24
ABAP Study 000 : Home  (0) 2022.11.24
ABAP Study 004 : Data Element  (0) 2022.11.24
ABAP Study 003 : Domain  (1) 2022.11.24
ABAP Study 001 : SAP GUI 설정  (0) 2022.11.24

댓글