
이번 포스팅은 프로그램 개발의 전 단계로 데이터 유형에 관하여 포스팅해보려 합니다. 관련된 많은 글들이 있어서 가볍게만 다루고 넘어갈까 합니다.
1) Built-in Data Types(ABAP Dictionary 기본유형)
1-1) Predefined Type(기본유형)
Type | 명칭 | 길이 | 특징 |
C | Character | 1~65535 | Character |
N | Numeric Character | 1~65535 | 숫자로 이루어진 Character |
D | Date Character | 8 | 날짜용 8자리 숫자 |
T | Time Character | 6 | 시간용 6자리 숫자 |
String | Variable Length Character | 가변길이 | 길이제한 없는 Character |
I | Integer | 4 byte | |
F | Floating point | 8 byte | |
P | Packed number | 8 byte | |
X | Byte | 1~65535 | |
XString | Byte String | byte string | 길이제한 없는 byte string |
S | 2byte Integer | +-32.768 | LCHR or LRAW 의 크기를 갖고있는 선행필드용. 일반적사용 안됨. |
유형에 맞지 않는 값을 넣으면 에러가 나겠지 맘 편하게 생각하고 코딩하는 편이라 일일이 몇 자리까지 들어간다를 생각하지는 않았습니다. 굳이 유형별로 최소, 최대 사용 가능한 범위를 알고 싶다면 아래 구문을 이용하는 것도 한 방법일 것입니다.
테스트로 P type 변수 16자리와 I type의 크기를 보면
DATA lv_rtn_max1 TYPE REF TO data.
DATA lv_rtn_min1 TYPE REF TO data.
DATA lv_rtn_max2 TYPE REF TO data.
DATA lv_rtn_min2 TYPE REF TO data.
DATA lv_p(16) TYPE p.
DATA lv_i TYPE i.
BREAK-POINT.
lv_rtn_max1 = cl_abap_exceptional_values=>get_max_value( lv_p ).
lv_rtn_min1 = cl_abap_exceptional_values=>get_min_value( lv_p ).
lv_rtn_max2 = cl_abap_exceptional_values=>get_max_value( lv_i ).
lv_rtn_min2 = cl_abap_exceptional_values=>get_min_value( lv_i ).
BREAK-POINT.
디버깅으로 그 값을 보면 최소, 최댓값을 알 수 있습니다.

1-2) Generic ABAP Types( 일반적인 ABAP Type )
Field Symbol 또는 Formal Parameter로 사용된다.
Field Symbol은 ASSIGN으로 변수에 할당 사용하고, Formal Parameter로 프로시저 호출 시 파라미터로 사용된다.
Field Symbol 사용법은 추후 더 자세히 다뤄 보자.
주로 사용하는 것을 살펴보면
Type | 형식 | 특징 |
Any | 모든유형 | 모든유형을 받아주는 변수 |
Any table | any table type 의 internal table | 동적인 테이블형식의 선언에 주로 사용 |
object | Any object type | 상속된 Class의 값을 가짐 |
table | Standard table | 참조 유형이 data 일때 사용 |
data | Any data type | 참조 유형이 object 일때 사용 |
Standard table | table type | No unique table key |
Sorted table | table type | table key는 항상 정렬되어 있습니다. Sort 구문 사용불가 |
Hashed table | table type | hash algorithm을 사용 table key로 데이타에 바로 접근이 가능 행수에 상관없이 각행의 접근하여 데이타 찾는 속도가 동일함 |
Any와 data는 같은 의미를 가지고 있으나 Any는 REF TO뒤에 사용될 수 없습니다.
아래와 같은 형식으로 선언하고 주로 변수의 Pointer로 사용됨.
DATA ref_out TYPE REF TO data.
DATA ref_obj TYPE REF TO object.
FIELD-SYMBOLS <fs_out> TYPE ANY.

Hashed table, Sorted table, Standard table Internal Table을 선언할 때 사용하며 Sorted, Standard는 Index라는 일종의 행 번호로 관리되고 index 번호로 데이터에 접근이 가능하다. Internal Table을 APPEND, DELETE 등으로 가공하면 자동으로 index는 추가되거나 삭제됩니다.
아래와 같이 Where 조건이 아닌 Index로 데이타에 접근이 가능하다.
READ TABLE lt_data INDEX 3.
1-3) Built-In Dictionary Types (ABAP Dictionary에 정의된 기본 유형)
해당 Type 은 프로그램 안에서 직접 사용은 불가하며 테이블이나 Structure의 필드 정의에 사용이 가능합니다.
이를 변수 선언 시 LIKE로 사용하면 간접적으로 사용 가능하겠죠.
테이블 생성 시 내장 유형을 선택한 후 Possible Entry를 띄워보면, 아래와 같이 사용 가능한 유형이 보입니다.


이중 특이한 것만 살펴보자. 나머지는 사용하면서 알아보면 되겠습니다.
Type | 명칭 | 길이 | 특징 |
CUYKY | CURR 참조 통화키 | 5 | 금액필드(CURR)에 값이 어느나라 통화인지 알기위한 통화키 |
CURR | DEC로 정의된 금액필드 | 1~31 | 금액필드 통화키를 참조해야함. |
LANG | Character | 1 | 국가별 언어키를 가지고있는필드에 사용 |
QUAN | DEC로 정의된 수량필드 | 1~31 | 수량필드 수량단위를 참조해야함. |
UNIT | QUAN 참조 단위키 | 3 | 수량필드(QUAN)의 수량단위를 알기위한 필드 |
CLINT | 크라이언트 선언용 Char | 3 | 테이블의 클라이언트표시 필드 MANDT에 사용 |
2) Built-In Data Objects (시스템 정의 data objects)
시스템에서 제공하는 공통 Global 변수라고 보면 되겠습니다.
2-1) ABAP System Fields
SE11로 SYST Structure를 조회하여 나오는 필드들을 SY-필드명으로 System Global 변수로 사용합니다. 크게는 서버의 이름 상태부터 클라인언트(MANDT) 정보, 인터널 테이블 정보까지 많을 상태를 알 수 있습니다.
Name | 특징 |
sy-batch | 'X' 이면 프로그램이 Background에서 실행되고 있음을 나타냄. |
sy-calld | CALL TRANSACTION, CALL DIALOG, SUBMIT ... AND RETURN을 사용하여 호출 한 후 "X"로 설정됩니다. |
sy-cprog | 최초 호출한 프로그램의 이름을 가지고 있음. ZTEST 안에서 ZTEST1을 호출하면 'ZTEST' 값을 가짐, 변하지않음 |
sy-repid | 현재 수행중 프로그램의 이름을 가지고 있음. ZTEST -> ZTEST1 수행중 이면 'ZTEST1' 값을 가짐 |
sy-datum | Local date of the ABAP system |
sy-uzeit | Local Time of the ABAP system |
sy-dynnr | 현재 화면의 번호 |
sy-index | Loop index. In DO and WHILE loops |
sy-stepl | Table Control의 index 현재 행번호 |
sy-tabix | Internal Table의 index 현재 행번호 |
sy-langu | 사용중인 logon language를 가지고 있음. T002(언어키) 테이블의 값임 |
sy-msgid | MESSAGE 안의 message class |
sy-msgno | MESSAGE 안의 message number |
sy-msgty | MESSAGE 안의 message type 'A' 'E' 'I' 'S' 'W' 의 메세지유형 |
sy-msgv1 ~ 4 | MESSAGE 안의 필드 값 |
sy-subrc | 가장 최근 수행된 구문의 상태를 나타냄. 0 이면 오류가 없음 아니면 오류를 의미함. |
sy-sysid | 접속한 SAP System ID으로 SAP GUI에 설정한 SID 임 |
sy-ucomm | Function code that triggered the event PAI. 눌려진 버튼등의 Function code. |
sy-tcode | Name of the current transaction code. Background 에서 수행될때는 값이 없음. |
sy-tfill | DESCRIBE TABLE, LOOP AT, and READ TABLE 에서의 데이타 총 건수를 나타냄 |
2-2) 기타 Objects
i) space는 공백을 나타낼 때 사용함.
CONCATENATE lv_data lv_data INTO lv_data SEPARATED BY space.
ii) me는 메서드 안에서 선언된 Local 변수가 아닌 Class 선언 안에 정의된 Global Class변수에 접근하여 사용이 가능합니다.

결과를 보면 me->write()는 Class 정의에 선언된 변수를 가리킴을 알 수 있습니다.

iii) SCREEN
화면의 PBO 이벤트에서 화면을 구성하는 요소에 접근하여 값을 변경하거나 할 경우 LOOP AT SCREEN 구문으로 Loop를 돌면서 원하는 요소를 찾아 그 속성을 바꿀 때 사용합니다.

이상으로 기본 데이터 유형을 살펴보았습니다. 프로그램 안에서 변수를 선언하며 사용해보겠습니다.
긴 글 읽어주셔서 감사합니다.
'ABAP' 카테고리의 다른 글
[SAP ABAP 강좌 20] Internal Table 활용1 - APPEND,COLLECT (0) | 2021.06.25 |
---|---|
[SAP ABAP 강좌 19] 변수 선언 및 Internal Table (0) | 2021.06.24 |
[SAP ABAP 강좌 17] VIew Cluster (0) | 2021.06.01 |
[SAP ABAP 강좌 16] Maintenance View - Events 예제 (0) | 2021.05.31 |
[SAP ABAP 강좌 15] Maintenance View (유지보수 Dialog) (0) | 2021.04.22 |
최근댓글