본문 바로가기

ABAP 프로그래밍 개념/ABAP 프로그래밍 Concept

ABAP Programming Concept : Data Types(Predefined Elementary Data Types)

Data Types는 data objects를 정의하는 템플릿입니다(Data Types are templetes that define data objects). Data Type는 어떻게 data object의 내용이 ABAP Statement에 의해 해석되는 방식을 결정합니다. 관리목적의 정보를 저장하기 위해 일부 공간을 차지하는 것 이외에는 Data Types는 프록그램에서 작업하기 위한 어떠한 메모리 공간도 차지하지 않습니다.

Data Types는 elementray, complex, reference type로 넓게 분류될 수 있습니다. 앞으로의 글을 통해서는 우선저긍로 elementary data types에 대해 알아보고 간략하가 complex types와 reference types 에 대해 알아보겠습니다.


Elementray Data Types

Elementray Data Types는 ABAP 프로그램의 각 개별 필드들의 유형을 구체화합니다. Elementray Data Types는 Predefined elementray types(사전정의된 elementray 유형)와 user-defined elementray types(유저가 정의한 elementary types)로 구분 됩니다.



Predefined Elementary Data Types


Sap 시스템에는 Predefined Elementary Data Types(사전정의된 Elementary 데이터 유형)이 기본 제공됩니다. 이러한 Data Types는 ABAP을 위한 SAP NetWeaver 서버 커널에 미리 정의되어있으며 모든 ABAP 프로그램에서 유효합니다. 개발자는 이러한 Predefined Elementary Data Type를 사용하여 프로그램의 data objects에 type을 할당할 수 있습니다. 또는 개발자는 Predefined Data Type을 이용하여 User-Defined Elementary Data Type만들 수 있습니다.

아래 표는 사용가능한 Predefined Elementary Data Type입니다.

Data Type 정의
i 4-byte integer
int8 8-byte integer
f Binary floating-point Number
p Packed Number
decfloat16 Decimal floating-point number with 16 decimal places
decfloat34 Decimal floating-point number with 34 decimal places
c Text Field(alphanumeric characters
d Date Field(format : YYYYMMDD)
n Numeric text field(numerric charater 0 to 9)
t Time Field(format : HHMMSS)
x Hexadecimal field

Predefined Elementary Data Type은 numeric type과 nonnumeric type으로 분류됩니다. 6가지의 Predefined Numeric Elementary Data Type과 다섯가지의 Predefined Nonnumeric Elementary Data Type이 있습니다.

6가지의 Predefined Numeric Elementary Data Type

  • 4-byte integer
  • 8-byte integer
  • Binary floating-point Number
  • Packed Number
  • Decimal floating-point number with 16 decimal places
  • Decimal floating-point number with 34 decimal places

다섯가지의 Predefined Nonnumeric Elementary Data Type

  • Text Field
  • Date Field
  • Numeric text field
  • Time Field
  • Hexadecimal field

f, int8, decfloat16, decfloat34, d, t라는 data types의 길이는 고정되어 있습니다. 다른 말로 하면, data objects를 선언하거나 user-defined delementary data types를 프로그램에서 이러한 고정된 길이를 가진 data types를 이용하여 선언할때, 길이를 구체화 할 필요가 없다는 것입니다. 필드길이는 data object가 메모리를 점유하는 byte의 수를 결정합니다. 

c, b, x, p라는 data tyeps는 길이가 type 정의에 포함되어 있지 않습니다. 그렇기 때문에, 프로그램에서 data object를 선언할 때 길이를 정의해주어야 합니다. 

Predefined Elementary Data Type에 대해 자세히 알아보기에 앞서서, 어떻게 이것을 이용해서 프로그램에서 Data Object를 선언하는지 봅시다.

Data Object를 정의하는데 사용되는 Keyword는 DATA 입니다. 구문을 위해, Data Object에 이륾을 지어주어야 하고, TYPE라는 additon을 통해 그것의 기술적 속성을 이끄는 data type을 언급해주어야 합니다. 아래 예시는 Data Object인 IV_NAME을 C Type을 통해 선언하는 것을 볼 수 있습니다.

DATA iv_name TYPE c. ( DATA : Keyword, iv_name : Data Object Name, Type C : Data Type Reference)

위의 예시에서 구체적으로 길이를 정해주지 않았습니다. 그러므로, Object는 그것의 Data Type의 초기길이(Initial Length)를 자동으로 가지게 될 것입니다. iv_name은 TYPE c로 선언되었는데 길이가 정해지지 않았으므로 그것의 Default Length인 1자리를 가지게 될 것입니다. 그래서 iv_name은 한 자리의 문자숫자식을 저장할 수 있습니다.

만약, 당신이 data object의 다른 길이를 원한다면, data object를 선언하는 동안에 길이를 구체적으로 명시해주어야 합니다. 이때는 length라는 addition을 사용하거나, 괄호를 사용하면 됩니다. 위의 예시를 10자리를 가진 iv_name으로 바꾸기 위해서는 

DATA iv_name(10) TYPE c.
DATA iv_name TYPE c LENGTH 10.

이제 위의 iv_name은 10자리의 문자숫자식을 저장할 수 있습니다.

TYPE c와 달리 고정된 길이의 data types를 사용하기 위해서는, 구체적으로 길이를 정해주지 않아도 되는데 data types 그 것이 사전 정의가 되어있기 때문입니다.

DATA  count TYPE i.
DATA date TYPE d.

아래 표는 각 data type의 initial length(초기 길이), 유효 길이, 그것의 초기값(initial value)가 정리되어 있습니다. inital length는 data object를 정의하는데 구체적인 길이 명시가 없다면 메모리를 자동으로 점유하는 default length입니다. data object의 initial value는 메모리가 비어있을 때 저장되는 값입니다. 예를 들어 TYPE c는 초기값으로 공간을 공백으로 채운다면, TYPE n은 0으로 채울 것입니다.

Data Type Initial Field Length(Bytes) Valid Field Length(Bytes) Initial VALUE
Numeric Types
i 4 4 0
int8 8 8 0
f 8 8 0
p 8 1-16 0
decfloat16 8 8 0
decfloat34 16 16 0
Charater Types
c 1 1-65535 SPACE
d 8 8 '00000000'
n 1 1-65535 '0 ... 0'
t 6 6 '000000'
Hexadecimal Type
x 1 1-65535 X' 0 ... 0'

 

Predefined nonnumeric Data Typedms Character Types은 Character Types와 Hexadecimal Types로 분류 될 수 있습니다.

■ Charater Types
c, n, d, t Data Types는 Character Types입니다. 이러한 유형의 Data Ojects들은 Charater Fields라고도 불리웁니다. 이 필드들의 각각의 위치는 한 자리 Character를 저장할 수 있습니다. 예를들어 LENGTH 5의 Data Object는 5자리의(5글자의) Character을 저장할 수 있다는 의미입니다. 현재는 ABAP은 ASCII나 EBCDI과 같은 Single Byte Code(단일 바이트 코드)에서만 작동합니다.

- ASCII(American Standard Code for Information Interchange)는 Character-encoding standard(캐릭터 형식 인코딩 표준)입니다. ASCII는 컴퓨터와 다른 기기들의 텍스트를 표현해주고 Character-encoding이 필요한 곳에 대중적인 선택이 되어지고 있습니다. ASCII 파일에서, 각 문자와 숫자는 7-bit 이진수로 나타내집니다.

-EBCDI(Extended Binary Coded Decimal Interchange Code)는 8-bit character endcoding standard(8비트의 캐릭터 형식 인코딩 표준) 입니다. 이 것은 각 문자와 숫자가 8-bit의 이진수로 나타내진다는 것을 의미합니다.

SAP NetWeaver의 6.10 버젼이 출시된 이후로 ABAP은 Unicode와 Non-Unicode를 다 지원합니다. 그러나 Non-Unicode에 대한 지원은 NetWeaver 7.5 부터는 철회되었습니다.

single-byte code는 각 character 한자리에 1 byte가 사용되는 character encoding를 말하는 것입니다. 예를들어, 문자 A는 single-byte encoding에서 1 byte를 점유하는 것을 의미합니다.

■ Hexadecimal Types(16진법 유형)
Data Type x는 메모리의 개별 byte를 해석합니다. 이러한 필드들은 hexadecimal fields라고 불리웁니다. 개발자는 single bits를 hexadecimal fields를 이용해서 처리할 수 있습니다. Hexadecimal notation(16진수 표기법)은 이진코드값의 인간 친화적인 표현입니다. 각 Hexadecimal 숫자(digit)은 4 binary digit(내개의 이진 숫자)를 나타내므로, 하나의 byte(8 bits)는 2자리 16진수 값으로 더 쉽게 나타낼 수 있습니다.

현대의 프로그래밍 언어에서는, bits와 bytes 레벨에서의 데이터를 처리할 필요성은 거의 없습니다. 그러나, ABAP과 달리 많은 외부 데이터 소스는 multibyte 인코딩을 사용합니다(ABAP은 single byte code). 그러므로 Type x 필드들은 유니코드 시스템에 유용하기 때문에, 외부 소프트웨어 어프릴레케이션에 의해 처리된 binary data에 작업하기에는 더 좋습니다.

예를들어, 필드 사이에 16진수(Hexadecimal) 코드 09를 삽입하여 MS Excel과 같이 새 필드들이 각각 어디서 시작하는지 아는 스프레드시트 소프트웨어를 위한 탭 구분 파일을 만들 수 있습니다. Type x 필드들은 내부 테이블 데이터로 다양한 포맷의 파일을 만들고 싶을 떄 유용합니다.

 

반응형