반응형

     

     

    이번 포스팅은 프로그램 개발의 전 단계로 데이터 유형에 관하여 포스팅해보려 합니다. 관련된 많은 글들이 있어서 가볍게만 다루고 넘어갈까 합니다.

     

    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를 돌면서 원하는 요소를 찾아 그 속성을 바꿀 때 사용합니다.

     

     

    이상으로 기본 데이터 유형을 살펴보았습니다. 프로그램 안에서 변수를 선언하며 사용해보겠습니다.

     

    긴 글 읽어주셔서 감사합니다.

     

    728x90
    반응형
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기