이전에 standard와 sorted를 먼저 다뤘기 때문에, hashed table만 다루고자한다-!
HASHED TABLE이란?
- 내부적으로 해시 알고리즘을 사용해서 탐색.
- 항상 UNIQUE KEY가 있어야 함.
- 탐색 속도 O(1): 항목이 수천 개여도 거의 같은 속도!
- 단점: 인덱스 기반 접근 불가 → 순서 개념이 없음!
TYPES: BEGIN OF ty_fruit,
name TYPE string,
price TYPE i,
END OF ty_fruit.
DATA: gt_fruit TYPE HASHED TABLE OF ty_fruit
WITH UNIQUE KEY name.
DATA: gs_fruit TYPE ty_fruit.
- 순차적인 index를 가지고 있지 않음
- Standard table의 key access 속도는 인터널 테이블의 LINE수에 따라 선형 종속적으로 증가
- Sorted Table은 지수 함수로 증가
- HASHED TABLE은 정해진 KEY 필드값으로만 데이터를 찾을 수 있다!
TYPES: BEGIN OF ty_fruit,
name TYPE string,
color TYPE string,
price TYPE i,
END OF ty_fruit.
DATA: gt_fruit TYPE HASHED TABLE OF ty_fruit
WITH UNIQUE KEY name. " name이 유일 키!
- 이렇게 정의하면 name 필드만 키다.
- 탐색은
`READ TABLE gt_fruit WITH KEY name = 'apple' INTO gs_fruit. "⭕ OK` 이렇게 하면됨!
다른 key로 찾거나, index접근을 한다면 그것은 불가능!
하지만 키 필드를 여러개 지정은 가능하다.
DATA: gt_fruit TYPE HASHED TABLE OF ty_fruit
WITH UNIQUE KEY name color.
- 이렇게 된다면 탐색은
READ TABLE gt_fruit WITH KEY name = 'apple' color = 'red' INTO gs_fruit. "⭕ OK
-모든 키 필드를 명시하고, 일부만 지정하면 탐색은 불가하다.
해시테이블 탐색흐름
1. 내가 찾고자 하는 키(name, 또는 name+color)를 정의한다
2. 해시 테이블이 그 키로 해시값을 계산한다
3. O(1) 시간 안에 값을 바로 찾아낸다!
READ TABLE <ITAB> WITH KEY col1 BINARY SEARCH.
=> Binary Search하는 방법!
LOOP AT itab.
READ TABLE ITAB WITH KEY
ENDLOOP.
⬇️
SORT ITAB BY F1.
LOOP AT ITAB.
READ TABLE ITAB WITH KEY~
BINARY SEARCH.
ENDLOOP.
Binary SEARCH vs Sorted
- APAB은 상황에 따라 Binary SEARCH를 명시적으로 사용하기도 하지만,
보통은 SORTED or HASHED 테이블을 사용해서 자동 최적화를 함
1. STANDARD TABLE
- 기본 테이블 구조
- 선형탐색(linear search) -> 한줄씩 검사
- 느리다는 단점이 있음
2. SORTED TABLE
- 정렬된 상태 유지
- 자동으로 이진탐색 사용됨
- 빠르다! (O(longN))
3. HASHED TABLE
- 키를 기준으로 해시값 계산
- 항상 상수 시간(O(1)) 탐색
- 가장 빠름, 단 READ WITH TABLE KEY만 가능
항목 | Standard Table | Sorted Table | Hashed Table |
탐색 속도 | 느림 (O(n)) | 빠름 (O(log n), 자동 Binary Search) | 매우 빠름 (O(1), 해시 탐색) |
정렬 상태 | 없음 | 항상 정렬 유지 (키 기준 자동 정렬) | 없음 (순서 없음, 해시 구조) |
키 설정 | 선택 가능 (UNIQUE/ NON-UNIQUE) | 필수 (UNIQUE or NON-UNIQUE) | 필수 (항상 UNIQUE만 가능) |
중복 키 허용 여부 | 가능 (WITH NON-UNIQUE KEY) | 가능/불가능 설정 가능 | ❌ 불가 (항상 UNIQUE KEY 필수) |
인덱스로 접근 | ✅ 가능 (READ INDEX, LOOP AT INDEX) | ✅ 가능 | ❌ 불가능 (INDEX 접근 불가) |
삽입 속도 | 빠름 | 삽입 시 자동 정렬이 있어 비교적 느림 | 빠름 (단, 키 중복 시 오류) |
적합한 사용 상황 | 소규모, 간단 순차처리, 인덱스 접근 필요 | 정렬된 데이터 기반 탐색 | 키 기반 빠른 조회가 중요한 경우 |
탐색 방법 예시 | READ TABLE ... | READ TABLE ... (정렬 기준 키 사용) | READ TABLE ... WITH KEY ... 필수 |
LOOP 사용 가능 여부 | ✅ 가능 | ✅ 가능 | ✅ 가능 (단, 순서 의미 없음) |
APPEND 가능 여부 | ✅ 가능 | ✅ 가능 (정렬 위치로 자동 삽입) | ❌ APPEND 불가 → INSERT 사용 |
'SAP' 카테고리의 다른 글
easy abap 26. INSERT (0) | 2025.05.13 |
---|---|
easy abab 25. 인터널 테이블 명령어 - move, clear, refresh, free, sort, describe (0) | 2025.05.13 |
easy abap 23. Internal Table 정의, 생성 (0) | 2025.05.11 |
easy abap - 22. Function Module & Function Group (0) | 2025.05.11 |
easy abap 21. Local-Macro, Global-Macro (0) | 2025.05.11 |