ABAP에서 데이터를 가공하기 위해 선언하는 구조체 형태의 DATA OBJECT 를 Work Area라 부른다.

그 중 TABLES 를 사용하여 선언되는 Table Work Area에 대해 알아보겠다.

 

 

Table Work Area를 선언하는 방법은 간단하다. 

TABLES  Structure Type  or  Database Table  or  Database View ( classic view )

위의 표기법 처럼 TABLES 구문 뒤에는 ABAP Dictionary에서 선언된 Structure Type, Table, View ( classic view ) 가 올 수 있으며, 그것과 동일한 이름의 구조체 형태인 DATA OBJECT를 정의하는 것이다.

( * Classic View : Database view 또는 Projection view 를 말함 ) 

 

이것은 DATA 선언문을 이용해 DATA OBJECT를 선언하는 것과 동일한 효과이며,

자재마스터 테이블인 'MARA' 를 예를 들어 표현하면 다음과 같다.

DATA  MARA  TYPE  MARA.    =    TABLE  MARA.

DATA OBJECT를 선언하는 'DATA' 구문이 있음에도 'TABLES' 구문이 굳이 필요한 이유는??

 

Table Work Area의 주 기능은 화면의 필드와 ABAP Program 간의 데이터를 주고받기 위한 Work Area 역활을 하는 것이다. 이러한 이유로 Table Work Area를 Interface Work Area 라고 표현하기도 한다. 

이 때 화면에 생성된 필드들은 ABAP Dictionary에서 가져와서 생성하였을 경우를 말한다. 

 

 

< Screen Painter에서 Dictionary를 통해 필드를 생성하는 화면 >

즉, 화면에서 ABAP Dictionary를 통해 필드를 구성한 경우 반드시 ABAP Program 에서는 Table Work Area로 선언해야 화면과 Program 간 데이터를 서로 주고 받을 수 있게 된다.


예외적으로 사용되는 특별한 경우로는 Selection Screen의 Function Code 제어 목적으로 사용하기도 한다.

( * 'SSCRFIELDS' Structure 형태의 Work Area )

 

Table Work Area 의 주 기능은 화면 필드와의 Interface 이지만,

실무에서는 구조체 DATA OBJECT를 'DATA' 구문과는 달리 축약하여 짧게 선언할 수 있다는 이점 때문에

단순히 구조체 형태의  DATA OBJECT 용도로 많이 사용되고 있다.

( * OPEN SQL의 SELECT SINGLE 구문 같은 경우엔 DB TABLE명과 Work Area가 같을 경우 'INTO'구문 생략이 가능하다. )

 

또한 기능적인 사용 목적 외에도 단순히 프로그램 가독성의 목적으로 현재 프로그램에 사용되는 DB TABLE를

리스트하기 위한 용도로도 선언 되어진다. 


추가로 TABLES 구문은 OO ( Object-Oriented ) 개념인 Class 내에서는 사용 불가하며,

선언시에는 전역( Global )으로 선언되어야 한다. 

( * 기본적으로 프로그램에서 선언된 DATA OBJECT가 화면의 필드와 값이 Interface되기 위해선 전역으로 선언되어야 한다. ) 

 

서브루틴( Perform ) 또는 Function Module 내에서 선언하여 로컬( Local )로도 사용 가능하지만

SAP ABAP GUIDE에서는 권장하지 않고 있다.

TABLES 구문은 기본적으로 화면의 필드와 Interface하기 위한 용도이기 때문에 선언된 위치에 상관없이

프로그램 내부적으로 전역으로 인식하므로 로컬의 의미와는 맞지 않는다.

 

만약 서브루틴이나 Function Moudle 내에 로컬 처럼 선언했을 경우에는 값의 제어 측면에서만 로컬의 

속성을 갖게 된다.

 

즉, 로컬 영역에서 TABLES로 선언된 DATA OBJECT는 루틴을 빠져나오면 할당된 값은 사라지지만

메모리에는 여전히 전역처럼 존재하고 있다. 

 

다음은 로컬로 TABLES를 이용해 선언한 DATA OBJECT의 로컬과 전역의 변화사항을 보여주는 디버깅 화면이다.

< 예시. 서브루틴 내에서 TABLES로 선언된 Data Object에 값이 할당된 화면 >

 

<예시. 서브루틴을 빠져나와도 로컬처럼 값은 사라지지만 전역처럼 메모리에는 여전히 존재함 >

+ Recent posts