ABAP/ABAP

ABAP 변수 선언

y1000 2007. 11. 10. 23:03

1 아밥에서의 변수의 형태

※ 아밥에서는 다른 언어와 다르게 타입에 기초하여 변수를 선언하기 보다는 아밥 딕셔너리에 선언되어 있는 테이블, 뷰, 구조, 데이터 엘리먼트 등을 이용하여 변수를 선언하는 경우가 많다.

변수는 크게 "일반 변수", "Work Area", "내부 테이블" 형태로 선언되고 각 변수가 참조한 아밥 딕셔너리의 오브젝트의 성질(타입, 길이)을 가진다.

 

1.1 일반 변수

흔히 생각하는 단 하나의 값을 가지는 변수

 

1.2 Work Area

여러 개의 필드를 가지는 변수, 데이터를 딱 한건만 가지고 있을 수 있다.

 

1.3 내부 테이블

여러 개의 필드를 가지고 여러 건의 데이터를 가지고 있을 수 있는 변수

- 내부 테이블은 헤더라인을 가지고 있는 경우와 안 가지고 있는 경우가 있다.

※ 내부테이블은 크게 스탠다드 내부테이블, 소트 내부테이블, 해쉬 내부테이블로 나뉘는데 소트와 해쉬는 특별한 경우에만 사용되므로 보통 내부테이블이라 말하면 스탠다드 내부테이블을 의미한다.

 

2 변수 선언

아밥에서 변수를 선언하는 방식은 여러가지 방식이 있으나

LIKE 문을 이용한 방법으로 통일하는 방법을 추천한다(추천 이유는 아래에...).

2.1 일반 변수

DATA : 변수명 LIKE 테이블명-필드명.

예) DATA : L_MATNR LIKE MARA-MATNR. 

    : MARA 테이블의 MATNR 과 같은 형태의 변수(자재번호를 담을 수 있는 변수.)

 

2.2 Work Area

LIKE 문 뒤에 테이블, 뷰, 스트럭쳐의 이름을 써주면 Work Area 가 된다.

DATA : 변수명 LIKE 테이블명 or 뷰 명 or 구조 명.

예) DATA : LS_MARA LIKE MARA.

    : MARA 테이블과 같은 필드를 가지는 Work Area. 데이터는 딱 한건만 가질 수 있다.

 

2.3 내부 테이블

2.3.1 OCCURS 옵션을 추가하면 내부 테이블이 된다.

DATA : 변수명 LIKE 테이블명 or 뷰 명 or 구조 명 OCCURS n.

예) DATA : LT_MARA LIKE MARA OCCURS 0.

     : MARA 테이블과 같은 필드를 가지나 여러건의 데이터를 가지고 있을 수 있다. 

       헤더라인이 없기 때문에 LOOP를 돌면서 처리하려면 따로 선언한 WORK AREA가 있어야 한다.

 

2.3.2 WITH HEADER LINE 옵션을 추가하면 헤더라인이 있는 내부 테이블이 된다.

DATA : 변수명 LIKE 테이블명 or 뷰 명 or 구조 명 OCCURS n WITH HEADER LINE.

예) DATA : LT_MARA2 LIKE MARA OCCURS 0 WITH HEADER LINE.

 

예를 든 것을 비교하면 아래와 같다.

DATA : L_MATNR  LIKE MARA-MATNR.

DATA : LS_MARA  LIKE MARA.

DATA : LT_MARA  LIKE MARA OCCURS 0.

DATA : LT_MARA2 LIKE MARA OCCURS 0 WITH HEADER LINE.

OCCURSWITH HEADER LINE 이라는 옵션을 통해 쉽게 내부테이블, WORK AREA 등을 구분해서

변수를 선언할 수 있다.

 

3. LIKE 문을 추천하는 이유

3.1 변수 선언 문법의 다양성에 의한 초보자의 어려움.

아밥에는 변수를 선언할 수 있는 여러가지 방법을 지원한다.

경력이 어느 정도 되는 분은 쉽게 여러가지 방법을 사용할 수 있지만,

초보자는 다양한 문법 사이에서 어떤 문법이 더 간단하며 효과적인가를 고민하지 않을 수 없다.

또한 초보자의 경우 내부 테이블과 WORK AREA를 제대로 구분하지 못하는 경우도 있다.

그에 따라 변수가 적절하지 않게 선언될 수 있으며, 적절하지 않게 선언된 변수는 프로그램 로직이나 향후 유지보수함에 있어 오해를 일으킬 수 있는 소지가 있다.

 

3.2 프로그램 로직의 재 사용성 측면.

LIKE 문을 써서 WORK AREA, 내부테이블 변수를 선언하기 위해서는

반드시 참조하는 구조가 아밥 딕셔너리에 정의되어 있어야 한다.

아밥 딕셔너리에 정의되어 있으므로 FORM 이나 FUNCTION 에 파라미터로 쉽게 처리할 수 있으며

FORM 이나 FUNCTION을 이용한 재 사용성을 높일 수 있다.

 

3.3 새로운 기술로의 확정성 용이

BSP, Class 의 경우 like 문을 쓸 수 없다 ㅡㅜ..

대신 TYPE문을 쓰면 되는데 예는 아래와 같다.

DATA : LS_MARA TYPE MARA.  

" 테이블, 뷰, 구조를 참조한 경우에는 WORK ARAE가 된다.

DATA : LT_MARA TYPE MARATT.

" 테이블 유형을 참조한 경우에는 내부 테이블이 된다. 

 

그런데 변수가 BEGIN OF ~ END OF ~로 선언된 경우 결국 위와 같이 전환하기가 쉽지 않다.

(BEGIN OF ~ END OF ~에 대한 구조를 만들거나 그 소스를 복사해서 타입선언 하는 곳에 코딩)

하지만 LIKE 문을 썼다면 이미 참조하는 테이블, 뷰, 구조가 있기 때문에 테이블 유형을 쉽게 만들어서 사용할 수 있다.

 

3.5 결정적으로 중요한 이유..

TABELS 구문 에서 중요하다.

 

SAP R3 ABAP 아밥 뮤메

'ABAP > ABAP' 카테고리의 다른 글

ABAP 스탠다드 TABLE  (0) 2014.11.18
Object Documentation  (0) 2014.11.17
Message Class  (0) 2014.11.17
Data Element 필드라벨  (0) 2014.11.17
TABLES 구문  (0) 2014.11.17