ABAP Internal Table 개념, 사용법 정리

Internal Table 이란?

Internal Table 은 ABAP 프로그래밍의 가장 중요한 요소 중 하나 다. 말 그대로 table 형태의 변수를 선언 할 수 있다. Java Programming 을 해봤다면 비슷한 역할을 ArrayList, LinkedList 등의 컬렉션 타입들이 하고 있다.

Internal Table 은 필드와 값을 지닌 라인을 지니는데 DB의 데이터를 끌고 와서 보여주는 것이 주인 SAP 에서 아주 편리한 변수 타입이다. 아예 DB 내의 테이블 구조를 복사해서 사용할 수도 있다.

선언 방법은 이전 글인 ABAP 기초 – Structure (구조체) 타입 변수 선언 구조와 아주 흡사하게 선언 할 수 있다.

Internal Table 변수 선언

OCCURS 0 사용 (구 문법)

DATA: BEGIN OF lt_employee OCCURS 0,
  id TYPE i,
  name TYPE c LENGTH 30,
  position TYPE c LENGTH 20,
  salary TYPE p DECIMALS 2,
END OF lt_employee.
ABAP

구조체 선언과 비교해 보면 ‘OCCURS 0‘ 를 이용해 선언하고 있다. 여기서 뒤 숫자의 의미는 사이즈 이며 들어 갈 수 있는 데이터의 크기를 할당 할 수 있는데 0을 주게 되면 제한을 두지 않는다는 의미다.

현재는 권장 되지 않고 구 버전 ABAP 코딩 프로그램에서 자주 보이는 구문이다. 2011 년 SAP 커뮤니티 에선 해당 구문이 폐기된 구문이라 표현한다.

선언 된 테이블

TYPE STANDARD TABLE OF 사용

TYPES: BEGIN OF ty_employee,
  id TYPE i,
  name TYPE c LENGTH 30,
  position TYPE c LENGTH 20,
  salary TYPE p DECIMALS 2,
END OF ty_employee.

DATA: lt_employee TYPE STANDARD TABLE OF ty_employee.
ABAP

이 문장은 이전 게시글 ABAP 기초 – TYPES 구문을 통한 타입 정의 에서 TYPES 를 이용해 구조체 변수를 선언해 보았다. Internal Table 은 변수 선언 시 구조체 에서 TYPE 을 적던 부분을 TYPE STANDARD TABLE OF 를 사용해 적어주면 된다.

선언 된 테이블

구조체(Structure)로 선언된 Work Area 와 함께 사용

TYPES: BEGIN OF ty_employee,
  id TYPE i,
  name TYPE c LENGTH 30,
  position TYPE c LENGTH 20,
  salary TYPE p DECIMALS 2,
END OF ty_employee.

DATA: lt_employee TYPE STANDARD TABLE OF ty_employee,
      ls_employee TYPE ty_employee.
ABAP

Internal Table의 경우 해당 테이블에 값을 넣기 위해 같은 구조를 지닌 Work Area 가 필요하다. 위의 구문 에선 ls_employee 가 그 역할을 한다.

JAVA, JavaScript 에서 JSON Array에 값을 넣기 위해 JSON Object 를 사용하는 것과 같다 생각하면 된다.

데이터 삽입, 삭제, 수정

데이터 삽입 (APPEND)

TYPES: BEGIN OF ty_employee,
  id TYPE i,
  name TYPE c LENGTH 30,
  position TYPE c LENGTH 20,
  salary TYPE p DECIMALS 2,
END OF ty_employee.

DATA: lt_employee TYPE STANDARD TABLE OF ty_employee,
      ls_employee TYPE ty_employee.

ls_employee-id = 1.
ls_employee-name = 'John Doe'.
ls_employee-position = 'Manager'.
ls_employee-salary = 50000.

APPEND ls_employee TO lt_employee.
ABAP

lt_employee(Internal Table) 내부에 값을 넣기 위해 ls_employee(Work Area) 에 먼저 값을 넣고 APPEND ~ TO ~. 구문으로 데이터를 넣는다. 그럼 순서대로 데이터가 삽입된다.

데이터 삽입 (APPEND)

데이터의 삭제 (DELETE)

TYPES: BEGIN OF ty_employee,
  id TYPE i,
  name TYPE c LENGTH 30,
  position TYPE c LENGTH 20,
  salary TYPE p DECIMALS 2,
END OF ty_employee.

DATA: lt_employee TYPE STANDARD TABLE OF ty_employee,
      ls_employee TYPE ty_employee.

ls_employee-id = 1.
ls_employee-name = 'John Doe'.
ls_employee-position = 'Manager'.
ls_employee-salary = 50000.

APPEND ls_employee TO lt_employee.

DELETE lt_employee WHERE id = 1.
ABAP

SQL을 다뤄 보았다면 쉽게 이해할 수 있다. WHERE 뒤에 오는 조건에 맞는 데이터가 테이블 내에서 삭제 된다. 해당 코드에선 id 가 1인 값을 삭제한다.

선언 된 테이블

데이터 수정 (LOOP AT ~ END LOOP, MODIFY 이용)

TYPES: BEGIN OF ty_employee,
  id TYPE i,
  name TYPE c LENGTH 30,
  position TYPE c LENGTH 20,
  salary TYPE p DECIMALS 2,
END OF ty_employee.

DATA: lt_employee TYPE STANDARD TABLE OF ty_employee,
      ls_employee TYPE ty_employee.

ls_employee-id = 1.
ls_employee-name = 'John Doe'.
ls_employee-position = 'Manager'.
ls_employee-salary = 50000.

APPEND ls_employee TO lt_employee.

ls_employee-id = 2.
ls_employee-name = 'John Doe'.
ls_employee-position = 'Manager'.
ls_employee-salary = 50000.

APPEND ls_employee TO lt_employee.

LOOP AT lt_employee INTO ls_employee WHERE id = 1.
  ls_employee-salary = 55000.
  MODIFY lt_employee FROM ls_employee.
  EXIT.
ENDLOOP.
ABAP

ABAP 에서 Internal Table은 LOOP AT 구문을 통해 담은 순서대로 Work Area에 값을 담을 수 있다. 그리고 LOOP AT 으로 바라보고 있던 데이터를 MODIFY 구문을 통해 수정 할 수 있다.

추가적으로 ABAP은 특이하게 반복문, 조건문 등을 사용할 때 괄호 등을 사용하지 않고 ‘END 구문’ 을 통해 종료 한다.

데이터 수정 (LOOP AT ~ END LOOP, MODIFY 이용)

WITH HEADER LINE

TYPES: BEGIN OF ty_employee,
  id TYPE i,
  name TYPE c LENGTH 30,
  position TYPE c LENGTH 20,
  salary TYPE p DECIMALS 2,
END OF ty_employee.

DATA: lt_employee TYPE STANDARD TABLE OF ty_employee WITH HEADER LINE.

lt_employee-id = 1.
lt_employee-name = 'John Doe'.
lt_employee-position = 'Manager'.
lt_employee-salary = 50000.

APPEND lt_employee.
ABAP

Internal Table 엔 HEADER LINE 이란 옵션이 있다. 해당 옵션을 사용하면 별도의 Work Area 변수를 선언 하지 않고 Internal Table 자체에 데이터를 담아 둘 Work Area 가 생성된다.

이렇게 선언 하게 되면 코드가 간결해지고 코딩하기가 편리해 진다. 위에서 보듯, APPEND 구문 에서도 따로 TO 구문을 사용하지 않아도 된다.

하지만, 최근에 와선 변수와 코드들은 철저하게 분리 동작해서 버그를 줄이는 방향으로 바뀌고 있으므로 별도의 Work Area 를 선언하는 것을 추천하고 있다.

HEADER LINE 을 선언하게 되면 테이블로 이용해야 할 땐 대 괄호를 사용해 lt_employee[] 해당 형태로 사용한다.

WITH HEADER LINE
0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x
목차
위로 스크롤