LOOP AT vs. READ TABLE 실무 개념 정리
✅ LOOP AT
- 요약
- 내부 테이블을 순서대로 반복
- 전체 데이터 반복 처리
- 왜 중요한가?
- MODIFY, DELETE 가능
- FIELD-SYMBOL 사용
🔍 FIELD-SYMBOL이란? 실제 데이터를 복사하지 않고, 메모리 주소를 참조해 원본 데이터에 직접 접근하는 포인터 개념의 변수
- 앞으로 어떻게 적용할까?
- 전체 데이터를 순회하며 조건에 맞는 데이터를 가공/플래그 처리할 때 사용
- 루프 내에서 데이터를 수정해야 할 경우 반드시 ASSIGNING 로 처리
LOOP AT lt_customer INTO ls_customer.
IF ls_customer-country = 'KR'.
ls_customer-flag = 'X'.
MODIFY lt_customer FROM ls_customer.
ENDIF.
ENDLOOP.
LOOP AT lt_table ASSIGNING <fs_line>.
<fs_line>-flag = 'X'. "실제 lt_table이 수정됨"
ENDLOOP.
IF <fs_customer> IS ASSIGNED. "ASSGIN 여부 확인
WRITE: <fs_customer>-name.
ELSE.
WRITE: '해당 고객이 존재하지 않습니다.'.
ENDIF.
✅ READ TABLE
- 요약
- 왜 중요한가?
- WITH KEY로 빠른 탐색
- BINARY SEARCH 시 빠름 (O(log n))
- INTO 사용 시 복사본 → 수정 불가, 단 ASSIGNING 사용 시 참조하여 수정 가능
- 앞으로 어떻게 적용할까?
- 조건에 맞는 한 건의 데이터를 빠르게 찾을 때
- 루프 없이 존재 여부를 검사하거나 값만 읽고 싶을 때
READ TABLE lt_customer INTO ls_customer
WITH KEY customer_id = 'C001'.
IF sy-subrc = 0.
WRITE: ls_customer-name.
ENDIF.
기준 실무 판단
| 판단 기준 |
추천 구문 |
설명 |
| 전체 반복이 필요할 때 |
LOOP AT |
내부테이블 전체 순회 |
| 조건에 맞는 1건 찾을 때 |
READ TABLE |
단건 조회 최적 |
| 성능 중요 + 정렬된 테이블 |
READ TABLE ... BINARY SEARCH |
고속 탐색 |
| 루프 내 검색 반복될 때 |
SORT + BINARY SEARCH |
성능 향상 핵심 포인트 |
*잘못된 부분이 있다면 댓글 부탁드려요~