ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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
Designed by Tistory.