SAP ABAP 인터널테이블(Internal Table)과 작업 영역(Work Area)의 차이점 설명

SAP에서 ABAP 프로그램을 개발할 때 Internal Table과 Work Area를 많이 사용해서 개발하게 됩니다.

ABAP 개발에 익숙한 사람은 두 가지 용어에 대해 정확한 차이점을 알고 있지만 ABAP을 처음 접하는 사람은 다소 헷갈려 하는 경우가 있습니다.

C, C#, JAVA 같은 일반적인 개발 언어에서는 접해 보지 않은 개념이기에 처음 접할 때 약간 혼란스럽게 받아들이는데 한두 번만 사용해 보면 쉽게 이해할 수 있는 부분입니다.

이번 글에서는 SAP ABAP 인터널테이블(Internal Table)과 작업 영역(Work Area)의 차이점 설명에 대해 기술해 보겠습니다.

ABAP의 Internal Table(인터널테이블)

ABAP 프로그램을 개발하면서 기본적으로 사용하는 것이 인터널 테이블(Internal Table) 입니다.

인터널 테이블을 쉽게 설명하면 데이터베이스(Database)의 테이블(Table) 비슷한 기능을 합니다.

인터널 테이블에 여러 레코드를 저장할 수 있으며 레코드 포인터(Table Index)를 사용하여 레코드를 읽거나, 추가하거나, 삭제하거나, 수정하는 등의 기능을 수행할 수 있습니다.

인터널 테이블을 선언하는 방식에 따라 헤더 라인(WITH HEADER LINE) 영역을 표시할 수 있으며 헤더 영역은 Work Area(작업 영역)의 기능을 수행하게 됩니다.

▼ Header Line이 있는 인터널 테이블 선언

DATA: BEGIN OF IT_TAB1 OCCURS 0.
        INCLUDE STRUCTURE SBOOK.
DATA: END OF IT_TAB1.


▼ Header Line이 있는 인터널 테이블 선언

DATA: IT_TAB2 LIKE SBOOK OCCURS 0 WITH HEADER LINE.


▼ Header Line이 없는 인터널 테이블 선언

DATA: IT_TAB3 LIKE SBOOK OCCURS 0.


▼ Header Line을 가지는 IT_TAB1과 IT_TAB2 인터널 테이블의 경우 아래 화면과 같이 두 가지 영역을 가지게 됩니다.

  • ABAP 프로그램 에서 IT_TAB1 또는 IT_TAB2는 Header Line을 의미합니다. 즉, Work Area에 해당합니다.
  • IT_TAB1[] 또는 IT_TAB2[]는 인터널 테이블의 Body를 의미합니다. 실제 레코드가 저장된 인덱스를 가집니다.
SAP ABAP 인터널테이블(Internal Table)과 작업 영역(Work Area)의 차이점 설명 1


▼ Header Line을 가지지 않는 IT_TAB3는 아래 화면과 같이 Body 부분만 존재합니다.

SAP ABAP 인터널테이블(Internal Table)과 작업 영역(Work Area)의 차이점 설명 2


▼ 만약 Header Line이 없는 인터널 테이블에 아래와 같이 값을 입력하려고 하면 에러가 발생하게 됩니다.

  • “IT_TAB3” is a table without a header line and therefore has no component called “CARRID”.
  • Header Line이 있는 IT_TAB1과 IT_TAB2는 에러 없이 값을 입력할 수 있습니다.
SAP ABAP 인터널테이블(Internal Table)과 작업 영역(Work Area)의 차이점 설명 3

ABAP의 Work Area(작업 영역)

Work Area(작업 영역)는 인터널 테이블이나 데이터베이스 테이블을 TYPE 또는 LIKE로 선언된 변수 입니다.

Work Area의 기본 형태는 인터널 테이블과 동일하지만 하나의 레코드만 저장된다는 특징이 있습니다. 일종의 구조(Structure) 선언의 변수라고 생각하면 이해하기 쉽습니다.
인터널 테이블과 굳이 비교 하자면 인터널 테이블의 헤더 라인(Header Line) 영역의 역할을 한다고 생각하면 됩니다.

▼ Work Area 선언을 아래와 같습니다.

DATA WA_TAB1 LIKE IT_TAB1.
DATA WA_SBOOK TYPE SBOOK.


▼ Work Area는 하나의 레코드만 가지므로 추가나 삭제의 개념이 없습니다.

  WA_SBOOK-CARRID = ‘AA’.
  WA_SBOOK-CARRID = ‘BB’.
  WA_SBOOK-CONNID = ‘100’.

위의 예제처럼 CARRID에 ‘AA’를 넣고, 다음에 ‘BB’를 넣었을 때 최종 CARRID는 마지막으로 입력된 ‘BB’가 남게됩니다.

마무리

사실 인터널 테이블(Internal Table)과 작업 영역(Work Area) 구조가 비슷하기에 혼돈할 수 있는데 쓰임새는 전혀 다릅니다.

인터널 테이블은 데이터를 저장하고, 수정, 삭제, 변경을 처리하는 용도로 사용되고, Work Area는 구조 형태의 변수로 사용됩니다.

Work Area는 Internal Table의 작업을 효과적으로 처리하기 위한 용도로 많이 활용됩니다.





이 글이 도움이 되었기를 바랍니다. ^-^


답글 남기기