본문 바로가기

SAP&ABAP

EASY ABAP - 4-1. Data Type(1)

728x90

 ABAP 프로그램에는 Data Type과 Data Variable(Data Object)이 존재한다.

Data Type

- 프로그램에서 사용할 수 있는 데이터의 타입을 정의

- ABAP Dictionary의 타입을 프로그램에서 참고하여 사용할 수 있다, 즉 테이블 구조 그대로 변수로 사용 가능

 

Data Variable

- Data Type을 참고하여 값을 저장할 수 있는 변수

- 프로그램의 실행 시점에 메모리를 차지하는 데이터 변수

- Data Object : ABAP 프로그램이 실행되는 동안 메모리를 점유하게 되는 물리적인 단위. 이름이 없는 문자열, Text Symbol, 예약어(키워드), Constants 등이 존재. Data Variable보다 상위 개념이지만 같은 것으로 봐도 공부하는데 지장 없음.

 

Data Type의 종류

3가지 그룹의 Data Type이 있다. 

- Predefined ABAP Type : kernel 레벨에서 정의되어 있는 기본 데이터 타입. 

- Local Data Type in Rrogram : ABAP 프로그램 내에서 사용하기 위해 정의한 Local Type

- Global Data Type in ABAP Dictionary : 모든 ABAP 프로그램에서 사용할 수 있는 Global Data Type. TYPE 구문의 이용할 수 있다. 그래서 ABAP Dcitionary 오브젝트인 Table(Table Field), Data Type, Data Element, Structure, Table Type 등을 사용하여 Data Type이나 Data Variable을 선언한다.

 

 

TYPE과 DATA 선언

" Predefined ABAP Type 이용 변수 선언
DATA : GV_NUM  TYPE I.
DATA : GV_DECI TYPE F.

" 프로그램의 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.
DATA : GV_VAR LIKE GS_STRUCT-COL1.
 

" ABAP Dictionary의 Type을 이용한 변수 선언
DATA: GV_CARRID TYPE S_CARR_ID.
DATA: GV_CONNID TYPE SFLIGHT-CARRID.
DATA: GV_MATNR TYPE MARA-MATNR.

DATA : GV_NUM TYPE I VALUE 123.

DATA : GV_NUM2 TYPE N LENGTH 2.
 
DATA : GV_NUM3 TYPE P DECIMALS 3.
 

- TYPE : 변수의 타입을 정의한다. 3가지 Data Type 모두 사용 가능

- LIKE : 미리 생성된 Data Variable과 동일한 타입의 변수 선언할 때 사용

- VALUE : 모든 데이터 타입은 initial value(default value)가 존재한다. VALUE 옵션으로 초기값 설정이 가능하다. 기본적으로 VALUE IS INITIAL 구문이 생략되어 있다고 보면된다. 다만 Constants 변수를 선언할 때는 VALUE 옵션이 필수이다.

- LENGTH : 필드의 길이 설정. C, N, P, X 타입에만 사용 가능

- DECIMALS : DATA TYPE P 에서만 사용 가능. 1~14 사이의 소수 자리 수를 설정.

  데이터 타입 접두어
1 필드 V 또는 D
2 구조체 S
3 상수 C
4 인터널 테이블 T
5 클래스 O
6 RANGE R
7 데이터 참조 변수
(=데이터 오브젝트)
F

- 이외에도 ABAP 프로그램에만 존재하는 PARAMETERS와 SELECT-OPTIONS 변수는 각각 P, S와 같이 한 자리 접두어만 사용하여 구분한다.

PARAMETERS : P_CARRID TYPE S_CARR_ID.

SELECT-OPTIONS : S_CARRID FOR SFLIGHT-CARRID.

 

전역 변수 정의 / 지역 변수 정의

- ABAP에서의 전역 변수(Global Variable)은 한 프로그램 내에서 또는 함수 그룹 내에서 접근할 수 있는 데이터 유형을 의미한다.

- 변수명은 주로 G로 시작한다. ( GV_XXX, GT_XXX )

 

- 지역 변수는 프로그램의 함수나 서브루틴과 같은 모듈 내에서만 유효한 변수를 말한다.

- ABAP NAMING RULE 점검하기 위한 T-CODE : SCI

 

 

 

Predefined ABAP TYPE

1. Numeric Data Type

Type I : Integer

- 값의 범위 -2^31 ~ (2^31 - 1)

- 정수 타입

- 정수가 아닌 것은 Round(반올림)

- Counter, Item 수, Index 등에 쓰임

 

Type : P

- 소수 자리 허용

- 가용 Size 1~16byte.(32자리까지 표현 가능)

- 소수 자리 최대 14자리

- 프로그램 속성 세팅 시 Fixed point arithmetic 체크해야 사용 가능하며 그렇지 않으면 Integer로 표현됨.

- 정확한 계산이 필요한 경우 사용됨

- 자바의 String처럼 일반적인 자료형이 아니라 편의를 위해 만든 자료형이므로 더 느리다.(java의 BigDecimal 클래스와 비슷하지 않을까?)

- 자리 수를 선언하지 않으면 기본적으로 8byte로 선언(15자리 숫자, 1자리 부호)

- 소수점을 표현할 때는 DECIMALS 옵션을 추가한다.

Fixed point arithmetic

 

 

Type F

- 값의 범위는 10^-307 ~ 1-^308

- 지수 형태로 표현되므로 FLTP_CHAR_CONVERSION과 같은 function module 사용하여 데이터 타입을 바꿔서 출력

- 정확도가 높아야 하는 계산에는 Type P 사용할 것. 매우 작거나 큰 수를 위한 경우만 Type F 권장

- Value 범위가 넓거나 반올림 오류가 중요하지 않을 경우만 권장 ( 부동 소수점과 관련된 내용임 )

 

 

Numeric Operator(연산자)

Operator Calculation Priority  동일 키워드
+ Adds the operands 1  ADD N TO M
- Subtracts the right operand from the left 1  SUBTRACT N FROM M
* Multiplies the operands 2  MULTIPLY M BY N
/ Divides the left operand by the right 2  DIVIDE M BY N
DIV Integer part of the division of the left operand by the right, with positive remainder 2  
MOD Positive remainder of the division of the left operand by the right; a remainder other than zero is always between zero and the size of the right operand 2  
** Raises the left operand to the power of the right 3  

 

 

 

2. Character Type

Type 초기길이 가능길이 초깃값 의미
C 1 1 - 65535 '...' Text Field (alphanumeric characters)
D 8 8 '00000000' Date field (Format : YYYYMMDD)
N 1 1 - 65535 '0....0' Numeric text field (numeric characters)
T 6 6 '000000' (format : HHMMSS)

- C 타입은 데이터 선언 시 문자 길이를 명시적으로 선언해야 함. 지정하지 않으면 1자리

- N 타입은 I와 달리 빈 부분은 0으로 채웟 ㅓ출력함

 

DATA : GV_DATE TYPE D.

GV_DATE = SY-DATUM.

GV_DATE = GV_DATE + 3. " 3일 후

 
DATA : GV_TIME TYPE T.
GV_TIME = SY-UZEIT.
GV_TIME = GV_TIME - 60. " 60초 이전
 

* SY-DATLO, SY-DATLO는 유저의 TIME ZONE(SU01에서 확인 가능)

- 다른 시간대에 위치한 사용자들을 위한 기능. 

- 타 시간대에 위치한 프로그램을 만들었고 그 프로그램에는 생성일자와 시간이 찍힌다면 그 시간대를 기준으로 데이터가 생성되어야 할 것이다. 이런 경우에는 DATE, TIME 필드를 2개씩 만들어서 유저를 위한 유저 시간대 생성일자, 시스템을 위한 시스템 시간대 생성일자를 모두 기록하여야 사용자 편의와 정확한 기록을 위한 시간 필드를 모두 구현할 수 있을 것이다. ( 그게 아니면 입력된 국가 필드를 만들어서 시스템 DATE와 TIME을 가지고 해당 국가의 시간대로 변환해주는 함수를 써서 출력하는 방법도 있을 것이다. )

 

SU01

 

* 가변 길이 타입인 STRING과 16진수인 HEXADECIMAL은 잘 안 쓰이는 듯하여 생략

 

 

728x90

'SAP&ABAP' 카테고리의 다른 글

EASY ABAP - 5. SQL  (1) 2024.04.05
EASY ABAP - 4-2. Data Type(2)  (0) 2024.04.04
EASY ABAP - 3. TMS와 CTS  (2) 2024.04.04
EASY ABAP - 2. Package에 대해서  (1) 2024.04.01
EASY ABAP - 1. 개발을 위한 기본적인 ABAP Workbench T-CODE  (1) 2024.04.01