프로그램의 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를 여러 테이블이 사용할 수도 있다.
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을 알아두면 개발 시 편리하다.
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.