본문 바로가기

SAP&ABAP

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

728x90

프로그램의 Local Type

- 프로그램 내에서 Local Type을 선언하여 프로그램에서만 사용하는 경우

- 프로그램 내의 '글로벌 변수'와 같은 사용 범위를 갖지만 프로그램 내에 한정된다는 의미에서 Local Type이라고 부른다.

 

1. TYPE 선언

TYPES : T_CAHR10(10) TYPE C.

DATA : GV_VAL1 TYPE T_CHAR10.

DATA : GV_VAL2 LIKE GV_VAL1.

 
2. Structured Type 선언
- 여러 개 필드로 이루어진 구조체 타입 선언 가능. (구조체는 변수들 모음 같은 거임. C에는 있지만 자바에는 없음. 자바의 클래스에서 메서드가 없이 인스턴스 변수만 있는 거라고 생각하면 됨)
 
" 구조체 타입 선언
 
TYPES : BEGIN OF T_REN,
    NAME TYPE C LENGTH 20,
    COUNTRY TYPE C LENGTH 15,
    CITY TYPE C LENGTH 10,
END OF T_REN.
 
" 구조체 변수 선언
 
DATA GS_PEOPLE TYPE T_REN.

GS_PEOPLE-NAME = 'TOTODA'.
GS_PEOPLE-COUNTRY = 'JAPAN'.
GS_PEOPLE-CITY = 'TOKYO'.

 


" INCLUDE TYPE 구문 사용
 
TYPES : BEGIN OF T_INFO.
    INCLUDE TYPE T_REN AS REN.
    TYPES : PHONE TYPE C LENGTH 10,
END OF T_INFO.

DATA GS_PEOPLE2 TYPE T_REN.

GS_PEOPLE2-REN-NAME = 'TOTODA'.
GS_PEOPLE2-REN-COUNTRY = 'JAPAN'.
GS_PEOPLE2-REN-CITY = 'TOKYO'.
GS_PEOPLE2-PHONE = '01012345678'.
 
 

" 구조체 타입 선언 없이 구조체 변수 선언
 
DATA : BEGIN OF GS_PEOPLE3,
    NAME TYPE C LENGTH 20,
    COUNTRY TYPE C LENGTH 15,
    CITY TYPE C LENGTH 10,
END OF GS_PEOPLE3.
 
 
 
" INLCUDE STRUCTRUE 사용해서 구조체나 ABAP Dictionary의 구조체 가져오기
 
DATA : BEGIN OF GS_PEOPLE4.
    INCLUDE STRUCTRUE T_REN AS REN. " AS REN 생략 가능 
    DATA : PHONE TYPE C LENGTH 10.
END OF GS_PEOPLE4.
 
 

ABAP Dictionary의 Type

- ABAP Dictionary는 Global Type이다. 모든 프로그램에서 Data Type으로 선언하여 사용할 수 있다.

- Table&View, Data Types, Type Groups 크게 3가지로 나뉜다.

 

1. Table and View

 

DATA : GS_SFLIGHT TYPE SFLIGHT.
 
 
2. Data Element
- Data Element는 개별 필드를 정의. Data Element 타입은 Domain을 참고한다. ( 둘의 차이는 ABAP Dictionary 파트에서 공부할 것)
- 같은 Domain을 여러 Data element가 참고할 수도 있고, 같은 Data Element를 여러 테이블이 사용할 수도 있다.
SE11에서 MATNR 조회
DATA : GV_MATNR TYPE MATNR.
 
 
3. Structure를 이용한 선언
DATA : GS_MCVBAP TYPE MCVBAP. " 영업 문서 : 품목데이타 구조
 
 

4. Type Group을 이용한 Type 선언
- Type Group은 ICLUDE Technique을 기반으로하며, 여러 가지 TYPE을 그룹으로 묶어서 선언할 때 사용된다.

- 개발 시에 자주 사용하는 ALV 프로그램은 SLIS라는 TYPE-POOL을 사용한다.

주문된 자재 유형이라는 타입 그룹
DATA : GV_TGRP1 TYPE WPOPT_S_DET_PO_ART_IN_HEAD.

GV_TGRP1-WERKS = '1110'.

WRITE : /  GV_TGRP1-WERKS.

WRITE : /  wpopt_c_method_old. " 상수를 그대로 사용

 

 

ABAP Dictionary Type 과 ABAP Type

- ABAP의 기본 데이터 타입을 사용하여 자주 사용되는 타입의 모습은 ABAP Dictionary Type으로 미리 생성되어 있다.

- CHAR10 과 같은 타입이다. 자주 사용되는 ABAP Dictionary Type을 알아두면 개발 시 편리하다.

 

CURR 예시

 

 

 

Assinging Value

- 값 할당은 MOVE 또는 WRITE TO 구문을 이용하여 수행한다. 

- MOVE는 자동 형변환이 일어나므로 편리하지만 조심해야 함.

- MOVE-CORESPONDING 구문으로 필드 구조가 다른 경우 매핑을 자동으로 수행하게 할 수 있다.

DATA : BEGIN OF GS_REN,
  NAME(20) VALUE 'TOTODA',
  COUNTRY(10) VALUE 'KOREA',
  CITY(20) VALUE 'SEOUL',
END OF GS_REN.


DATA : BEGIN OF GS_REN2,
  NAME(20) ,
  PHONE(10) VALUE '1234567891',
  CITY(20) ,
  COUNTRY(10) ,
END OF GS_REN2.

MOVE-CORRESPONDING GS_REN TO GS_REN2.

WRITE : / GS_REN2. " TOTODA    1234567891SEOUL               KOREA

 

- offset을 이용한 값 할당 : 인덱스 N 부터 시작해서 (M) 만큼 할당한다.

DATA : GV_F1(8) VALUE 'ABCDEFGH'.

DATA : GV_F2(8).

MOVE GV_F1+2(3) TO GV_F2.

WRITE : / GV_F2. " CDE

 

- 구조체 산술 계산

 

DATA : BEGIN OF GS_RATE, " 가중치
  KIM TYPE F VALUE '0.8',
  LEE TYPE F VALUE '1.0',
END OF GS_RATE.

DATA : BEGIN OF GS_RESULT, " 계산 대상
  KIM TYPE I VALUE 95,
  LEE TYPE I VALUE 70,
END OF GS_RESULT.

MULTIPLY-CORRESPONDING GS_RESULT BY GS_RATE.

WRITE : / GS_RESULT-KIM. " 76
WRITE : / GS_RESULT-LEE. " 70

 

 

ADD-CORRESPONDING

SUBTRACT- CORRESPONDING

MULTIPLY- CORRESPONDING

DIVIDE- CORRESPONDING 

- 4가지가 있다.

 

 

 

Constants

- 프로그램에서 자주 사용하는 값을 상수로 선언하여 사용 -> 변경 불가

- 구조체도 상수로 선언 가능하다.

- 초기값을 설정해주어야 한다.

CONSTANTS : GC_VAR1 TYPE INT4 VALUE 1.

 

Statics : 서브루틴(FORM, FUNCTION)에 사용되는 Local 변수의 값을 지속적으로 저장하여야 하는 경우 사용. 즉, 프로그램이 종료될 때 까지 값을 유지한다.

 

DO 3 TIMES.
    PERFORM CALL_SUBR.
  ENDDO.
 
FORM CALL_SUBR.
    STATICS LV_VAL TYPE I.
    LV_VAL = LV_VAL + 1.
   
    WRITE : / LV_VAL. " 1 2 3
ENDFORM.

 

- FORM 내부의 LOCAL 변수 LV_VAL의 값이 계속 유지되는 것을 알 수 있다.\

 

 

TABLES 선언

- TABLES 구문을 사용하여 TABLE, VIEW, STRUCTURE를 선언하게 되면 대상과 같은 Data Object를 생성한다. Table Work Area라고 부르며 프로그램 내에서 구조체 처럼 사용할 수 있다.

 

SELECT *
  FROM MARA  " 구조체와 테이블 이름이 같아서 INTO MARA 생략
 WHERE MTART = 'ZHAL'.
 
 WRITE : / MARA-MATNR.
 
ENDSELECT.

 

728x90

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

EASY ABAP - 6. Subroutine  (0) 2024.04.08
EASY ABAP - 5. SQL  (1) 2024.04.05
EASY ABAP - 4-1. Data Type(1)  (0) 2024.04.04
EASY ABAP - 3. TMS와 CTS  (2) 2024.04.04
EASY ABAP - 2. Package에 대해서  (1) 2024.04.01