CS Student’s SAP&Tech Journey✨

[SAP] 인터널 테이블(Internal Table) (1) 테이블 선언, 생성하기 본문

SAP/인터널 테이블 Internal Table

[SAP] 인터널 테이블(Internal Table) (1) 테이블 선언, 생성하기

인포마틱 2025. 2. 7. 19:32

SAP ABAP에서 데이터를 다룰 때 인터널 테이블(Internal Table, IT)은 필수적인 개념입니다.
인터널 테이블은 프로그램 실행 중 메모리에 저장되며, 데이터베이스와 달리 임시 데이터 저장소 역할을 합니다.

이번 글에서는 인터널 테이블의 개념, 선언 및 생성 방법을 상세히 알아보겠습니다.

 

 

데이터 객체와 인터널 테이블에 관련된 포스팅 보러가기⬇️

 

ABAP 프로그래밍: 데이터 객체 이해하기 (Simple, Structure, Internal Table)

SAP ABAP을 사용하면 다양한 유형의 데이터 객체(Data Object)를 다루게 됩니다. ABAP에서는 단순 데이터(Single Data Object), 구조체(Structure), 내부 테이블(Internal Table)을 통해 데이터를 저장하고 관리할 수

informatik.tistory.com

 

 


 

1. 인터널 테이블(Internal Table) 개념

인터널 테이블은 동일한 구조(Structure)를 가진 데이터의 집합을 저장하는 메모리 내 테이블입니다.

  • 데이터베이스 테이블과 유사하지만 메모리에서만 존재
  • 반복적으로 사용되는 데이터 처리에 적합
  • 다양한 조작 기능을 제공 (APPEND, INSERT, READ, MODIFY, DELETE)

 

📌 인터널 테이블의 주요 속성

속성 설명
Line Type 인터널 테이블의 행 구조를 결정 (스트럭처 또는 테이블 필드)
Primary Key 검색 속도를 높이기 위한 키 (유일성 여부 설정 가능)
Table Kind 테이블의 유형 (Standard, Sorted, Hashed)

 

 

2. 인터널 테이블의 종류

인터널 테이블은 데이터 저장 방식에 따라 3가지 종류가 있습니다.

테이블 종류 특징 삽입(APPEND) 삽입(INSERT) 검색 속도
Standard Table 기본 인터널 테이블 (순서 없음) O O 느림 (순차 검색)
Sorted Table 자동 정렬됨 (Primary Key 기준) X O 빠름 (이진 검색)
Hashed Table 해시 알고리즘으로 검색 최적화 X O 매우 빠름 (해시 검색)

📌 정리

  • Standard Table: 순서 무작위, 추가 & 삽입 자유로움, 검색 속도 느림
  • Sorted Table: 자동 정렬, 중복 허용 여부 설정 가능, 검색 속도 빠름
  • Hashed Table: 검색 최적화, 중복 불가, 검색 속도 가장 빠름

 

 

3. 인터널 테이블 선언 및 생성

 

1️⃣ 테이블 타입을 먼저 정의하고 선언하는 방법 (TYPES 활용)

먼저 테이블 타입(Table Type)을 TYPES를 사용해 정의한 후, 그 타입을 기반으로 인터널 테이블을 선언하는 방식입니다.

* 1. 워크 에어리어(스트럭처) 정의
TYPES: BEGIN OF ts_struct,  
  field1 TYPE data_type1,  
  field2 TYPE data_type2,  
  field3 TYPE data_type3,  
  field4 TYPE data_type4,  
  END OF ts_struct.  

* 2. 테이블 타입 정의
TYPES tt_struct TYPE STANDARD TABLE OF ts_struct  
      WITH NON-UNIQUE KEY field1 field2.

* 3. 테이블 정의
DATA gt_table TYPE tt_struct.

 

 🔷 예제

* 1. 워크 에어리어(스트럭처) 정의
TYPES: BEGIN OF ts_flightinfo,  
  carrid TYPE S_CARR_ID,  
  connid TYPE S_CONN_ID,  
  fldate TYPE S_DATE,  
  percentage TYPE S_FLGHTOCC,  
  END OF ts_flightinfo.  

* 2. 테이블 타입 정의
TYPES tt_flightinfo TYPE STANDARD TABLE OF ts_flightinfo  
      WITH NON-UNIQUE KEY carrid connid.

* 3. 테이블 정의
DATA gt_flight TYPE tt_flightinfo.

📌 tt_flightinfo: 스트럭처를 기반으로 한 테이블 타입 정의
📌 WITH NON-UNIQUE KEY: 중복된 데이터 허용 (carrid, connid 기준)

 

WITH KEY 생략 가능한가요?

WITH KEY를 명시하지 않으면 기본 키가 없어 비효율적인 접근 방식(Linear Search)을 사용하게 됩니다. 
WITH KEY를 생략하면 키가 없는 테이블이 되므로, 성능을 위해 필요한 경우 WITH KEY를 명시하는 것이 좋으나 생략 가능합니다.

 

 

2️⃣ 스트럭처 타입을 직접 사용하여 선언하는 방법

테이블 타입을 별도로 정의하지 않고, 바로 스트럭처 타입(Structure Type)을 사용하여 인터널 테이블을 선언하는 방식입니다.

 

1. Standard Table (기본 인터널 테이블)

DATA gt_table TYPE STANDARD TABLE OF ts_struct  
      WITH NON-UNIQUE KEY field1 field2.

 

STANDARD TABLE은 기본값이므로 생략해도 되고 아래와 같이 사용할 수 있습니다.

DATA gt_table TYPE TABLE OF ts_struct  
      WITH NON-UNIQUE KEY field1 field2.

 

2. Sorted Table (자동 정렬되는 테이블)

DATA gt_table TYPE SORTED TABLE OF ts_struct  
      WITH NON-UNIQUE KEY field1 field2.

📌 Sorted Table은 INSERT만 가능하며, APPEND사용 불가

 

3. Hashed Table (빠른 검색용 테이블)

DATA gt_table TYPE HASHED TABLE OF ts_struct  
      WITH NON-UNIQUE KEY field1 field2.

📌 Hashed Table은 검색 속도가 가장 빠름 (APPEND 불가, INSERT만 가능)

 

 

❓ With Header Line 방식이란?

ABAP에서는 내부 테이블(Internal Table)을 정의할 때, 과거에는 Header Line이 포함된 방식을 사용할 수 있었지만, 현재는 더 이상 지원되지 않습니다.

기존 방식: Internal Table & Work Area

DATA: gt_carrier TYPE TABLE OF bc400_t_carriers,  " Internal Table
      wa_carrier TYPE bc400_t_carriers.          " Work Area

 

더 이상 지원되지 않는 방식: Internal Table With Header Line

  • 내부 테이블을 정의할 때, WITH HEADER LINE 옵션을 사용하면 Work Area가 자동으로 생성되었습니다.
  • 내부 테이블과 Work Area의 이름이 동일하여 혼동될 가능성이 있습니다.
DATA gt_carrier TYPE bc400_t_carriers WITH HEADER LINE. " IT 생성 + WA 자동 생성

 

 

 

3️⃣ 기존 Transparent Table을 기반으로 선언하는 방법

DATA gt_table TYPE TABLE OF db_table. " SAP DB 테이블을 그대로 사용

📌 헷갈리는 정의
DATA gt_flight TYPE TABLE OF [테이블]. " ✅
DATA gt_flight TYPE TABLE OF [테이블 타입]. " ❌ 

 

 

4. 인터널 테이블 선언 및 생성 한눈에 보기

방법 선언 특징
1. 테이블 타입(TYPES) 정의 후 선언 TYPES를 사용해 테이블 타입을 정의

TYPES ... TYPE STANDARD TABLE OF ...

그 후 인터널 테이블 선언 DATA ... TYPE ... 
재사용 가능, 키 설정 가능, 가독성 좋음
2. 스트럭처 타입을 직접 사용 스트럭처 타입 사용하여 인터널 테이블 정의

DATA ... TYPE STANDARD TABLE OF ... [스트럭처 타입]
빠르게 선언 가능, 간단한 테이블에 적합
3. Transparent Table을 기반으로 선언 테이블을 사용하여 인터널 테이블 정의

DATA ... TYPE TABLE OF ... [테이블]
데이터베이스 테이블과 동일한 구조 유지

 

 

📌 어떤 방식을 써야 할까?

✅ 재사용성이 중요하면? → 테이블 타입(TYPES) 정의 후 선언
✅ 코드가 간결해야 하면? → 스트럭처 타입 직접 선언
✅ 데이터베이스와 연동할 테이블이면? → Transparent Table 기반 선언

⭐ DB 테이블을 직접 기반으로 만들 거면 Transparent Table을, 프로그램 내부에서만 사용할 거면 스트럭처 타입을 사용합니다.