Internal Table (인터널테이블) ❓
: 프로그램 내에서 정의하여 사용할 수 있는 Local Table이다.
ABAP을 접하면 가장 기본적으로 Structure와 Internal Table을 접하게 된다.
Structure는 구조체로 여러 타입을 저장할 수 있는 한 줄짜리 변수이다.
그렇다면 Internal Table은?!
이름에 Table이 들어갔기에 Structure와 다르게 한 줄이 아닌 Table이다.
먼저 Internal Table의 속성은 총 3가지가 있다.
Internal Table을 이루고 있는 한 줄의 모양을 의미한다.
Structure를 의미하기도 한다. Structure가 모이면 Table를 이룬다!
Internal Table은 Primary Key 속성을 가지고 있다.
Primary Key는 3개의 유형이 있다.
a. Components
b. Unuqueness
c. Sequence
Table의 종류도 정해주어야 한다. Table의 종류는 개별 Entry에 접근하는 방법을 결정하며, 3가지 종류로 구분된다.
a. Standard
b. Sorted
c. Hashed
뜻 그대로 가장 기본적인 테이블 종류이다.
순차적인 Index를 가지는 테이블이며, Tree 구조를 이루고 있다.
Index Access를 가지고 있고, Key Access를 가지고 있다.(옵션)
그리고 Key는 NON-UNIQUE로 선언해야 한다.
즉 WITH UNUQUE KEY 구문을 사용할 수 없다.
DATA gt_pfli TYPE STANDARD TABLE OF spfli
WITH NON-UNIQUE KEY carrid connid.
이렇게 Standard Internal Table를 선언하면 된다.
하지만 Standard Table은 가장 기본적인 테이블 종류이기에 테이블 종류를 선언하지 않으면 자동적으로 Standard Table로 만들어진다!
여기서 꼭 기억해야 할 건 NON-UNIQUE KEY만 된다는 거!!
-> Key 필드로 정의된 값 중복 가능
Sorted Table은 Standard Table과 같이 Index Table이다. 그 중 Sorted Table은 이름처럼 정렬된 Internal Table 이다. 정렬 기준은 Key 값 이다. 그래서 Standard Table에서는 옵션이었던 Key Access가 필수이다.
즉 원하는 Key 값으로 항상 정렬된 결과로 저장할 수 있다. (내부적으로 BINARY SEARCH를 사용 -> SORT 명령어 사용 X)
Sorted Table은 NON-UNIQUE KEY와 UNIQUE KEY 모두 가능
DATA gt_pfli TYPE SORTED TABLE OF spfli
WITH NON-UNIQUE KEY carrid connid.
Hashed Table은 순차적인 Index를 가지고 있지 않으며, Hash 값으로 계산된 Key값으로만 탐색할 수 있다. 응답 속도는 인터널 테이블의 Entry 수와 상관없이 항상 같다. Hash 값은 Hash 알고리즘으로 계산된 것으로 메모리에 저장된 주솟값으로 데이터를 바로 읽을 수 있도록 도와준다.
-> 특별한 기준으로 데이터를 분류하는 테이블이기에 key필드로만 접근가능하기에 key Access 필수!
Hashed Table은 UNIQUE KEY만 가능.
DATA gt_pfli TYPE HASHED TABLE OF spfli
WITH UNIQUE KEY carrid connid.
이렇게 Internal Table 안에서 정해줘야 할 옵션들이 많은데 그 이유는 속도, 성능의 차이 때문.
어떤 경우에 어떤 옵션을 사용하면 좋을 지 알아야 잘 활용할 수 있다.
Index Table인 Standard Table(O(n))과 Sorted Table(O(log(n)))의 Key Access 속도는 테이블의 건수가 증가할수록 Sorted Table의 탐색 속도가 월등히 빠르다.
Sorted Table은 READ 속도가 우수하지만, Line을 추가하면서 정렬하기 때문에 APPEND 구문에서 속도가 많이 느리다. 대용량 데이터를 다룰 때에는 두 가지 타입을 잘 구분해서 사용하여야 한다.
READ 구문은 Sorted Table이 좋고
-> READ는 internal table 값에서 한 줄만 빼서 Structure에 보관
APPEND 구문은 Standard Table이 좋다.
-> APPEND는 마지막 줄에 추가하는 구문으로 Standard Table에서밖에 못 쓴다.