
ABAP 프로그램에 사용되는 데이터 타입을 정의하고 데이터 타입을 이용해 변수를 선언하는 방법을 학습해보자
목차
1. Predefined ABAP Type
2. 프로그램의 Local Type
3. ABAP Dictionary 의 Type
4. Assigning Value Type
5. 기타 변수 선언
ABAP 프로그램에는 Data Type과 Data Variable(Object)이 존재.
생성 구문 ( []는 옵션사항, |는 OR을 의미. )
TYPES dtype [TYPE type | LIKE dobj]
DATA var [TYPE type | LIKE dobj]
TYPES 구문을 사용하여 Data Type 을 선언하면 해당 프로그램에서만 사용할 수 있기 때문에 Local Data Type이라고 부름.
테이블 구조를 그대로 변수로 사용할 수 있음.
Data Type을 참고하여 프로그램에 사용할 수있는 변수.
Data Object란?
Data Variable은 Data Object를 의미함. Data Object는 ABAP 프로그램이 실행되는 동안 메모리를 점유하게 되는 물리적인 단위.
모두 ABAP 프로그램에서 사용할 수 있는 Global Data Type이다.
ABAP Dictionary Data Type은 ABAP 프로그램 내에서 TYPE 구문을 이용할 수 있다.
Data Type을 이용하여 ABAP 변수를 선언하는 방법 3가지
데이터 변수를 선언할 때 사용하는 구문. 변수명은 언더라인 포함 가능! 30자까지 가능하다.
Type type
데이터 변수의 타입 정의
콜론 기호 : 동일한 명령어를 쉼표로 구분하여 마침표를 만날 때까지 실행하도록 함. 명령어를 수행하고 동일한 기능을 여러 번 실행할 수 있도록 해줌.
LIKE num
앞에서 생성한 Data Variabl인 gv_num1과 동일한 타입의 변수를 선언할 때 사용한다.
타입이 있는 모든 변수를 사용할 수 있다.
VALUE int
모든 데이터 타입은 Initial Value가 존재함.
DATA 구문을 사용할 때 VALUE 옵션을 사용하면 기본 Initial Value 대신에 int로 초기값을 설정한다.
LENGTH n
필드의 길이 설정. C, N, P, X 타입에서만 사용 가능함.
DECIMALS n
Data Type에서만 사용 가능함. 1~14 사이의 소수 자리 수를 설정함.
[실습]
ABAP의 기본 문법 체크!
1. ABAP 프로그램의 한 문장은 마침표 기호로 마무리한다.
2. 프로그램 기능을 설명하는 주석은 2가지 존재.
(1) * 기호는 한 라인 전체를 주석 처리 함
(2) " 기호는 뒷 부분의 문자열을 주석 처리 함.
3. 문자열은 ' ' 기호로 처리함.
4. 명령어는 공백을 두고 처리함.
예시)gv_val='Easy ABAP'. = > X gv_val = 'Easy ABAP'. = > O 정답
규칙
1. ABAP Dictionary의 Naming Rule은 'Z' 또는 'Y'로 시작
2. INSERT/APPEND 같은 키워드는 사용할 수 없다.
3. 이외에는 고객사마다 규칙. 통일성 갖추기
4. 변수명은 포함 30자까지 가능
5. 변수의 앞 2자리는 데이터 유형을 한눈에 알아볼 수 있도록 정의, 구분자와 마지막 단어는 어떠한 역할을 하는지 의미 요약
보편적으로 사용되는 네이밍 규칙을 인지하고 rule에 맞게 적합하게 개발할 수 있어야 함.
화려한 기술과 실험적인 코딩보다 우선되어야 할 것 : 연속성이 유지되도록 가장 쉽게 유지보수할 수 있는 프로그램 만들어 내는 것
전역 변수 : 지역성 없음. 전역변수는 항상 메모리를 점유하고 있음.
[전역 변수 정의]
전역 변수 네이밍 규칙 -> 접두어 3자리로 사용하기
접두어
1. 범위
2. 데이터 유형
3. 데이터 성격
ex) GVF_CARRID 라는 변수에서 접두어의 의미: G전역, V필드, F플래그 성격의 데이터라고 약속 하는 것.
PARAMETERS 와 SELECT-OPTIONS 변수는 각각 P, S와 같이 한자리 접두어만 사용하여 구분하기.
지역 변수 : 프로그램의 모듈 내에서만 유효한 변수.
모듈: 함수나 서브루틴 같이 단위 기능을 구현하기 위해 스크립트를 그룹화한 것.
Code Inspector는 네이밍 룰이 적합한지 체크하는 기능을 제공하는 툴. T-CODE:SCI
[실습]
ABAP Editor: SAP 프로그램들의 소스를 유지보수할 수 있음.
T-CODE:SE38
New ABAP Editor : Front-End Editor
개발자들이 가장 많이 사용하는 ABAP Editor.
구문 색상 강조, 코드 힌트, 소스 코드 자동 완성 같은 최신 기술들 제공하는 통합 에디터
(1. 라인 번호 및 수정한 라인 표시 2. 명령어 완성 기능 3. 소스 Collapse 기능 4. 블록 selection )
Old ABAP Editor : Front-End Editor
구버전
Back-End Editor (Line-Based mode)
한번에 한 라인씩만 작업 가능
장점: Compression Logic을 사용할 수 있음.
아밥 커널 레벨에서 정의되어 있는 데이터 타입. 모든 아밥 프로그램에서 사용할 수 있다. 프로그램에 필요한 Local Type을 정의하기 위해 사용할 수 있다.
아밥은 8가지 기본 타입을 가지고 있다.
D, F, I는 이미 기술적 속성이 정의되어 있음. 필드 길이 정의 안해도 바로 사용 가능
C, N, X는 필드 길이 정의해야 함.
Type P는 DECIMALS를 명시하지 않으면 소수 자리 인식 불가...
Type F, I는 P보다 연산 속도가 빠르다.
ABAP에서 숫자 타입은 3가지로 존재. (I, P, F)
1. Type I
: 이미 기술적 속성이 정의되어 있어서 프로그램에서 필드 길이를 정의하지 않고 바로 사용할 수 있음.
4바이트 = 32비트까지 표현 가능
2. Type P
: Type P는 DECIMALS를 명시하지 않으면 소수 자리 인식 불가...
표준 8바이트.
3. Type F
: 이미 기술적 속성이 정의되어 있어서 프로그램에서 필드 길이를 정의하지 않고 바로 사용할 수 있음.
"+": 더하기
"-": 빼기
"*": 곱하기
"/": 나누기
"DIV": Integer 나누기
"MOD": Integer 나누기의 나머지
"**": 제곱
TYPE f 를 사용할 때는 'FLTP_CHAR_CONVERSION' 함수를 호출하여 문자형으로 반환한 후에 출력(WRITE) 해야함.
함수를 호출할 떄 DECIM 파라미터에 숫자 값을 선언하게 되면 해당 소수점 자리의 결과(반올림)를 보여주게 된다.
"ABS": 절대값 리턴
"SIGN": 부호에 대한 결과 리턴
"CEIL": 올림. 해당 값보다 작지 않은 가장 큰 정수를 리턴
"FLOOR": 내림. CEIL의 반대
"TRUNC": 내림. 소수점 버리고 정수만 남김.
"FRAC": 소수점 이하 자리만 남김.
"ACOS, ASIN, ATAN; COS, SIN, TAN": 삼각함수
"COSH, SINH, TANH": 쌍곡선 함수
"EXP": 지수함수
"LOG": 자연 로그 함수
"LOG10": 상용 로그 함수
"SQRT": 제곱근 함수
크게 4가지 존재. Character Field 라고 부름.
1. C: 문자, 숫자, 특수문자에 사용
2. N: 숫자를 C 타입으로 표현. Integer 형태를 문자 타입으로 보여줌.
3. D: 날짜 타입 표현
4. T: 시간 타입 표현
C타입은 데이터 선언 시 문자 길이를 명시적으로 선언해야 함.
문자 길이 지정X이거나 Data Type 선언X면 기본적으로 Character 1으로 정의됨.
Type c의 문자 길이를 지정할 경우에는 변수 뒤에 길이를 입력하거나,
LENGTH 옵션을 이용하여 선언할 수 있다.
LENGTH 키워드는 C, N, X, P 타입에서 사용 가능하고, 변수 길이를 정의한다.
MOVE 명령어 : = 기호와 동일하게 데이터를 할당하는 명령어이다.
MOVE-CORRESPONDING 구문: MOVE와 유사한 역할을 함. 구조체나 헤더라인이 존재하는 Internal Table 에 사용되는 구문. 동일한 필드명에 데이터를 할당하는 명령.
Strlen 명령어는 문자의 길이를 반환하는 기능 수행.
WRITE: 데이터를 LIST에 쓰는 역할을 수행.
슬래시 (/): New Line 을 의미함.
TYPE N은 숫자를 문자로 표현함.
따라서 TYPE I 를 선언하면 LIST에 출력 시 변수 자릿수만큼만 출력됨.
TYPE N 타입의 변수에서 공백은 0으로 표현됨. 문자 길이만큼 LIST에 조회됨.
날짜 타입 변수 gv_date 를 선언하여 sy-datum 값을 할당함. sy-datum은 시스템 변수로 시스템의 오늘 날짜를 저장하고 있음.
날짜 타입 변수에 숫자를 연산자와 함께 사용하면 일자를 계산하게 됨.
시간 타입 변수 sy-uzeit 시스템 변수는 현재 시간이 포함되어 있음. 시간 타입 변수에 연산을 하게 되면 초 단위(second)를 계산하게 됨.
이번에 핵심으로 배운 건 “ABAP 데이터를 다루는 최소 단위”였다.
TYPES·DATA 구문으로 로컬/글로벌 타입을 정의하고, 이를 객체(Data Object)로 메모리에 올리는 흐름을 익혔다.
덤으로 VALUE·LENGTH·DECIMALS 옵션으로 초기값·필드길이·소수점 자리까지 한 방에 잡을 수 있다는 점이 꽤 실용적이었다.
또 네이밍 룰(GVF_CARRID 같은 3글자 접두어)과 Code Inspector(SCI)로 룰 체크까지 돌려 보니 <<쉽게 읽히는 코드>>가 왜 중요한지 다시 한 번 느낄 수 있었다.
ABAP의 숫자 연산자와 문자형 타입도 중점적으로 학습했다. 기본 산술 연산자(+,-,*,/,DIV,MOD 등)뿐 아니라, ABS, CEIL, TRUNC, FRAC 같은 수치 함수와 삼각함수까지 포함한 수학적 계산 함수들의 폭넓은 제공이 특히 인상 깊었다.
또한, TYPE f처럼 부동소수점 타입은 바로 출력이 되지 않고 FLTP_CHAR_CONVERSION 함수를 거쳐야 출력된다는 점이 신기했고, 실무에서 꼭 기억해야 할 부분이라는 생각이 들었다..!
또한 문자형 타입(C, N, D, T)에 대한 이해를 통해 데이터 출력 방식이 타입에 따라 어떻게 달라지는지를 체험할 수 있었고, MOVE, MOVE-CORRESPONDING 같은 데이터 이동 명령어의 의미도 구체적으로 익힐 수 있었다.
간단해 보이는 타입과 연산이 실제 ABAP에선 명확한 규칙과 출력 방식으로 연결된다는 점이 재밌었고, 특히 sy-datum, sy-uzeit 같은 시스템 변수를 활용해 날짜와 시간을 계산하는 방식은 향후 실제 업무 로직에 유용할 것 같다.