-
1. ABAP 데이터 타입SAP/개념정리 2025. 6. 10. 14:11
이번 글에서는 ABAP 데이터 타입에 대해서 공부한다.
요약하면 변수 선언은 아래와 같이 작성하며,
DATA : 변수명1 TYPE 데이터타입, 변수명2 TYPE 데이터타입.
사용할 수 있는 데이터 타입에는 기본데이터, 로컬 데이터 타입, 글로벌 데이터 타입으로 3가지가 있다.
로컬 데이터 타입의 경우 사용자가 직접 프로그램 내에 정의하는 것이며 아래와 같이 작성한다.
TYPES : 타입명 TYPE 데이터타입.
아래에서 데이터 타입과 변수 선언에 대해서 더 자세히 알아보자.
ABAP 기본 문법
1. ABAP 프로그램의 한 문장은 마침표 기호(.)로 마무리한다.
예시 : WRITE gv_val.
2. 프로그램 기능을 설명하는 주석은 다음 2가지가 존재한다.
- * 기호는 한 라인 전체를 주석 처리한다.
예시 : * 주석 처리합니다.
- " 기호는 뒷부분의 문자열을 주석 처리한다.
예시 : WRITE gv_val. " 주석 처리합니다.
3. 문자열은 ' '기호로 처리한다.
예시 : gv_val = 'ABAP'
※ 문자열을 표현할 때 그레이브 기호(`)도 사용 가능. 다만 역할이 달라 상황에 따라 사용해야함.
작은 따옴표는 일반적인 문자열 상수를 표현할 때 사용하고, 그레이브 기호는 이중 큰타옴표나 따옴표가 들어간 문자열을 표현할 때 사용.
4. 명령어는 공백을 두고 처리한다.
예시 : gv_val='ABAP' => X
gv_val = 'ABAP' => O
1. Data Type
ABAP 프로그램은 크게 3가지 그룹의 데이터 타입을 사용할 수 있다.
1. Predefinde ABAP Type
- 기본 데이터 타입, 다른 언어처럼 기본적으로 제공되는 타입.
2. Local Data Type in Program
- 프로그램 안에서만 정의된 타입. (예: 구조체, 테이블 타입 등)
3. Global Data Type in ABAP Dictionary
- ABAP Dictionary에 정의된 타입. (데이터 요소, 구조체, 테이블 타입 등)
- 여러 프로그램에서 공통적으로 재사용 가능.
각 타입에 대해서 아래에 더 자세히 공부해보자.
2. Predefinde ABAP Type (기본 데이터 타입)
숫자 타입
타입 의미 초기 길이 가능 길이 초깃값 I 정수형 4 4 0 F 실수형 (부동소수점) 8 8 0 P 실수형 (패킹 소수점) 8 1 ~ 16 0 ※ 참고
* P 타입의 경우 DECIMALS를 명시하지 않으면 소수점 자리를 인식하지 못한다.
* F와 P의 차이
- F 타입 : 길이가 8바이트로 지정이 되어있으며, 소수점 자리수가 지정되지 않음. 정밀도에서 한계가 있음.
- P 타입 : 길이와 소수점 자리수를 LENGHT와 DECIMALS를 이용해 지정 가능함. 정밀한 계산을 해야하는 경우에 사용.
문자 타입
타입 의미 초기 길이 가능 길이 초기값 C 문자형 1 1 ~ 65535 공백 N 숫자를 C타입으로 표현 1 1 ~ 65535 '0...0' D 날짜 타입을 표현 8 8 '00000000' T 시간 타입을 표현 6 6 '000000' String 문자형(아주 긴 문자열 표현) 가변길이 ※ 참고
* 문자 타입 길이 지정 2가지 방법
- 예시 : DATA : gv_col1 TYPE c LENGTH 2,
gv_col2(2) TYPE c.
* N 타입의 경우 공백의 경우 0으로 채워짐.
- 예시 : DATA : gv_num TYPE n LENGTH 4.
gv_num = 15.
WRITE:/ gv_num.
결과 : 0015
* 날짜/시간 타입의 시스템 변수
- sy-datum(날짜) : 시스템의 오늘 날짜를 저장하고 있음.
- sy-uzeit(시간) : 시스템의 현재 시간을 저장하고 있음.
* String 타입
- 가변 길이를 가진 TYPE C라고 생각하면 됨.
- TYPE C와의 차이점은 프로그램이 실행된 환경에서 동적 메모리가 할당된다는 점이다.
* TYPE C와 String 관련 명령어
명령어 의미 사용 예 FIND 찾는 문자가 있으면 시스템 변수 sy-subrc=0 반환, 없으면 sy-subrc=4 반환 FIND <찾는 문자> IN <검색 대상>. REPLACE 특정 문자 치환. REPLACE <패턴> IN <대상 문자열> WITH <새로운 문자열>. TRANSLATE 대소문자 변경. TRANSLATE <문자열> TO UPPER CASE.
TRANSLATE <문자열> TO LOWER CASE.
TRANSLATE <문자열> USING <문자매핑>.SHIFT 왼쪽으로 한 칸씩 옮김. SHIFT <문자열> [LEFT|RIGHT]. CONDENSE 공백제거. CONDENSE <문자열> [NO-GAPS]. OVERLAY 빈 곳만 채워 넣음. OVERLAY <문자열1> WITH <문자열2>.
(<문자열2>가 <문자열1> 앞부분을 덮어씀)CONCATENATE 문자열 붙이기. CONCATENATE <문자열1> <문자열2> ... INTO <결과>. SPLIT 특정 문자 기준으로 자르기. SPLIT <문자열> AT <구분자> INTO <변수1> <변수2>. * FIND 명령어 추가 설명
- FIND <패턴> IN <문자열> [IN BYTE MODE] [MATCH OFFSET <위치>].
- <패턴>: 찾을 문자열
- <문자열>: 검색 대상
- [IN BYTE MODE]: 바이트 단위 검색 (옵션)
- [MATCH OFFSET <위치>]: 찾은 위치 반환
3. Local Data Type in Program
로컬 프로그램에서만 특별한 타입으로 사용하기 위해 TYPES 구문을 이용해 선언을 한다.
TYPES 타입명 [TYPE type|LIKE dobj]. TYPES t_char10(10) TYPE c. DATA gv_val1 TYPE t_char10. DATA gv_val2 LIKE gv_val1.
LIKE 구문의 경우 다른 변수나 필드를 이용하여 데이터 타입을 설정해준다.
* 구조체 타입 선언
TYPES: BEGIN OF ty_address, ..., {TYPE dtype ...} | {INCLUDE {TYPE|STRUCTURE} ...}, ..., END OF ty_address.
구조체 타입 선언할 때 3가지 방법이 있다.
1. INCLUDE TYPE 구문
INCLUDE TYPE 구문을 사용하여 중첩 구조체(Nested Structure)타입을 선언할 수 있다.
* 구조체 TYPE 선언 TYPES: BEGIN OF ty_address, city TYPE c LENGTH 20, state TYPE c LENGTH 20, END OF ty_address. * nested 구조체 TYPE 선언 TYPES: BEGIN OF ty_person, name TYPE c LENGTH 20, age TYPE i, INCLUDE TYPE ty_address, " ty_address를 중첩 구조체로 포함 END OF ty_person. * 구조체 Object 선언 DATA person TYPE ty_person. person-name = 'Tom'. person-age = 30. person-city = 'Seoul'. person-state = 'Seoul'. WRITE: person-name, person-age, person-city, person-state.
2. DATA BEGIN OF ~ END OF 구문
구조체 타입을 사용하지 않고 DATA BEGIN OF ~ END OF 구문을 사용하여 바로 구조체 변수를 선언할 수 있다.
DATA: BEGIN OF person, name TYPE c LENGTH 20, age TYPE i, city TYPE c LENGTH 20, END OF person. person-name = 'Tom'. person-age = 30. person-city = 'Seoul'. WRITE: person-name, person-age, person-city.
구조체 변수 할당시 '구조체-필드명'으로 사용한다.
3. INCLUDE STRUCTURE 구문
INCLUDE STRUCTURE 구문을 사용하여, DATA로 선언된 구조체나 ABAP Dictionary 구조체를 Nested Structure로 포함할 수 있다.
* 구조체 변수 선언 DATA: BEGIN OF address, city TYPE c LENGTH 20, street TYPE c LENGTH 20, zip TYPE c LENGTH 10, END OF address. DATA: BEGIN OF person, name TYPE c LENGTH 20, age TYPE i, INCLUDE STRUCTURE address, " 구조체 변수로 중첩 END OF person.
4. Data Variable
변수를 선언하는 방법에는 3가지가 있다.
1. Predefined ABAP Type을 이용하여 변수 선언
DATA : gv_num TYPE i, gv_deci TYPE f, gv_data TYPE d.
2. 프로그램의 Local Type을 이용하여 변수 선언
TYPES : BEGIN OF t_struct, col1 TYPE c, col2 TYPE i, col3 TYPE d, END OF t_struct. DATA : gs_struct TYPE t_struct.
TYPES 구문으로 우선 로컬 타입을 선언하고, DATA 구문에서 선언한 타입을 이용하여 변수를 선언하였다.
3. ABAP Dictionary의 Type을 이용하여 변수 선언
DATA : gv_carrid TYPE s_carr_id, gv_connid TYPE sflight-carrid, gv_matnr TYPE mara-matnr.
s_carr_id, sfligth-carrid, mara-matnr은 ABAP Dictionary에 정의되어있는걸 이용하여 변수를 선언하였다.
5. DATA 구문
1. TYPE
- 변수의 타입을 명시할 때 사용.
- 예시: DATA: lv_age TYPE i.
2. LIKE
- 이미 선언된 변수나 테이블 필드의 타입/속성 그대로 사용.
- 예시: DATA: lv_name LIKE lv_person-name.
이렇게 하면 lv_person-name과 같은 타입, 길이를 그대로 따라감.3. VALUE
- 변수 선언과 동시에 초기값을 설정.
- 예시: DATA: lv_age TYPE i VALUE 30,
lv_text1 TYPE c VALUE 'x',
lv_text2 TYPE c LENGTH 10 VALUE IS INITIAL.
VALUE IS INITIAL 구문은 변수 선언할 때 초기값을 '기본값'으로 명시적으로 지정할 때 사용.
위처럼 선언하면, lv_text는 길이가 10인 문자형 변수로 초기값이 공백으로 설정.
ABAP에서는 변수를 선언할 때 자동으로 초기값이 할당되기 때문에 명시적으로 초기화 의도를 표현하기 위해 사용(생략가능).
- 문자형 (C) → 공백
- 문자형 (N) → '0'
- 숫자형 (I, P, F) → 0
- 날짜형 (D) → 00000000
- 시간형 (T) → 000000
4. LENGTH
- 변수 길이를 직접 지정.
- TYPE C, N, P, X에서만 사용 가능.
- 예시: DATA: lv_text TYPE c LENGTH 10.
5. DECIMALS
- 패킹된 소수(P) 타입 변수의 소수 자리수를 지정
- 예시: DATA: lv_price TYPE p LENGTH 8 DECIMALS 2.
→ 8자리 숫자 중 2자리 소수점으로 표현 (예: 1234.56)
6. 기본 산술 연산자
기호 의미 사용 예 기호와 동일한 키워드 + 더하기 gv_result = gv_int1 + gv_int2. ADD gv_int1 TO gv_int2. - 빼기 gv_result = gv_int1 - gv_int2. SUBTRACT gv_int1 FROM gv_int2. * 곱하기 gv_result = gv_int1 * gv_int2. MULTIPLY gv_int2 BY gv_int1. / 나누기 gv_result = gv_int1 / gv_int2. DIVIDE gv_int2 BY gv_int1. DIV Integer 나누기 gv_result = gv_int1 DIV gv_int2. MOD Integer 나누기의 나머지 gv_result = gv_int1 MOD gv_int2. ** 제곱 gv_result = gv_int1 ** gv_int2.
7. 값 할당(Assigning value)
<f2> = <f1>. MOVE <f1> TO <f2>. MOVE-CORRESPONDING <String1> TO <String2>. WRITE <f1> TO <f2> [<option>].
1. <f2> = <f1>.
=> f2에 f1 값 할당, 일반적인 값 할당.
2. MOVE <f1> TO <f2>.
=> f2에 f1 값 할당, 명시적 값 할당.
3. MOVE-CORRESPONDING <구조체1> TO <구조체2>.MOVE-CORRESPONDING 구문은 구조체에서 값을 할당할 때 많이 사용되며, 각 구조체의 값은 필드에 값이 복사된다.
4. WRITE <f1> TO <f2> [<option>].=> f1의 값을 f2로 '포맷 변환'해서 복사.
예: 날짜 숫자 등을 특정 형식으로 변환할 때 사용.
[<option>]에 변환 옵션을 지정 가능(예: 숫자 자리수, 날짜 형식 등)
DATA: lv_date TYPE d VALUE '20250605', lv_text TYPE string. WRITE lv_date TO lv_text DD/MM/YYYY. " lv_text에 '05/06/2025'가 들어감
5. offset을 이용한 값 할당
필드의 일부 값을 정의할 수 있다.
MOVE <f1> [+idx][(len)] TO <f2> [+idx][(len)]. * 예시 DATA : f1(8) VALUE 'ABCDEFGH', f2(8). MOVE f1+2(3) TO f2. * 결과 CDE
8. 기타 변수 선언
1. Constants(상수)
CONSTANTS: c_company(10) VALUE 'ABAP'. CONSTANTS: BEGIN OF c_people, name(20) VALUE 'KIM', country(10) VALUE 'KOREA', END OF c_people.
2. Statics
STATICS f. STATICS: BEGIN OF struc, ..., END OF struc.
3. tables
TABLES <dbtab>.
TABLES 구문을 사용하여 ABAP Dictionary Table, View, Structure를 선언하게 되면 ABAP Dictionary 타입과 같은 Data Object가 생성 된다.
'SAP > 개념정리' 카테고리의 다른 글
7. Lock Object (0) 2025.06.27 5. ABAP 인터널 테이블 (0) 2025.06.22 4. ABAP 서브루틴, 함수 (0) 2025.06.19 3. ABAP 조건문, 반복문 (0) 2025.06.19 2. ABAP SQL (0) 2025.06.16