Clean ABAP ③ 내부 테이블 잘 쓰는 법: 키, 읽기, 루프
3줄 요약
테이블 종류는 용도로 골라요.
HASHED는 한 번 채우고 키로 자주 읽는 큰 테이블,SORTED는 계속 정렬돼 있어야 하거나 부분 키로 읽는 큰 테이블,STANDARD는 작은 테이블과 배열이에요.WITH DEFAULT KEY는 피하고, 키를 명시하거나EMPTY KEY를 써요.존재 확인에는
line_exists, 한 건 읽기에는READ TABLE, 조건 루프에는LOOP AT ... WHERE로 의도를 드러내요.
어떤 상황에서 쓰나요
내부 테이블은 ABAP 코드의 절반쯤을 차지해요. 그래서 "어떤 종류로 선언하나", "있는지 어떻게 확인하나" 같은 사소한 선택이 쌓여 코드의 읽기 쉬움과 성능을 갈라요. Clean ABAP 가이드의 이 장은 그 선택에 대한 기본값을 정리해 줘요.
핵심 내용
테이블 종류 고르기 (가이드 스스로 "대략적인 지침"이라고 말해요)
HASHED: 큰 테이블, 한 번에 채움, 거의 수정 안 함, 키로 자주 읽음. 내용이 바뀔 때마다 해시를 다시 계산하는 비용이 크니 자주 바뀌는 테이블에는 맞지 않아요. 데이터가 많고 읽기가 많을 때만 값어치가 있어요.SORTED: 큰 테이블, 항상 정렬돼 있어야 함, 조금씩 채우거나 수정함, 전체 키나 부분 키로 자주 읽음. 삽입할 자리를 찾아야 하지만 나머지 인덱스를 다시 맞출 필요는 없어요.STANDARD: 작은 테이블, 순서가 상관없거나 넣은 순서대로 처리해야 하는 배열, 인덱스 접근과SORT+BINARY SEARCH접근이 둘 다 필요한 경우.
`DEFAULT KEY` 를 피해요. 새 함수형 문장을 쓰려고 습관처럼 붙이는 경우가 많은데, 키는 대부분 필요 없는데 자원만 쓰고 숫자형 필드를 키에 포함해 엉뚱한 결과를 낼 수 있어요. 특히 필드 목록 없는 SORT, DELETE ADJACENT DUPLICATES 는 기본 키를 따라가므로, READ TABLE ... BINARY SEARCH 와 함께 쓰면 예상 밖의 결과가 나올 수 있다고 해요.
DATA itab2 TYPE STANDARD TABLE OF row_type WITH NON-UNIQUE KEY comp1 comp2.
DATA itab1 TYPE STANDARD TABLE OF row_type WITH EMPTY KEY.주의: EMPTY KEY 테이블을 필드 지정 없이 SORT 하면 아무것도 정렬되지 않아요. 키가 비어 있음을 정적으로 알 수 있으면 문법 경고가 나와요.
`INSERT INTO TABLE` 을 우선해요. 모든 테이블 종류와 키 종류에 쓸 수 있어서, 나중에 성능 때문에 테이블 종류를 바꿔도 이 문장은 고칠 필요가 없어요. APPEND TO 는 STANDARD 테이블을 배열처럼 쓰며 "맨 끝에 붙인다"는 점을 강조하고 싶을 때만 써요.
읽기는 의도가 보이게 써요.
IF line_exists( my_table[ key = 'A' ] ). " 있는지만 볼 때
READ TABLE my_table REFERENCE INTO DATA(line) WITH KEY key = 'A'. " 한 건 읽을 때
LOOP AT my_table REFERENCE INTO DATA(line) WHERE key = 'A'. " 조건에 맞는 모두READ TABLE ... TRANSPORTING NO FIELDS 와 sy-subrc 검사, 또는 LOOP AT 안에서 EXIT 하는 방식은 같은 일을 더 길게 말해요. LOOP 안의 IF 로 거르는 것도 WHERE 로 바꾸는 게 의도가 분명해요.
불필요한 이중 읽기를 피해요. 행이 있을 거라고 기대하는 경우라면 먼저 line_exists 로 물어본 뒤 다시 읽지 말고, 한 번 읽고 예외로 처리해요.
TRY.
DATA(row) = my_table[ key = input ].
CATCH cx_sy_itab_line_not_found.
RAISE EXCEPTION NEW /clean/my_data_not_found( ).
ENDTRY.원문은 이것이 성능뿐 아니라 "정상 흐름과 오류 처리를 한 곳에 섞지 말라"는 일반 규칙의 한 경우라고 설명해요(이 연재의 여덟 번째 회에서 다뤄요).
주의할 점
테이블 종류 선택은 가이드도 말하듯 대략적인 기준이에요. 데이터 크기와 접근 패턴을 실제로 재 보고 정하세요. 자세한 기준은 ABAP 언어 도움말의 "테이블 종류 선택" 항목에 있어요.
[ ]테이블 식,VALUE #( ... OPTIONAL ),REFERENCE INTO DATA(...),RAISE EXCEPTION NEW는 7.40 이상(일부는 그보다 높은 릴리스)에서만 돼요. ECC 에서는 쓰기 전에 문법 검사를 해 보세요. (7.40 기준은 원문에 적힌 것이 아니라 일반적으로 알려진 정보예요.)이 글은 원문을 읽고 정리한 것이에요. 예제를 직접 실행해 보지는 못했어요.
원문은 2019년에 처음 공개되어 2025년 3월에 마지막으로 고쳐진 문서예요(제가 읽은 판은 2026년 10월 기준). 이 글은 읽고 정리한 것이고 예제를 직접 실행해 보지는 않았어요.
원문 주소: https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#tables
출처와 이용 안내
원문: Clean ABAP - Tables · 작성자 SAP SE and contributors SAP/styleguides · 작성일 2019-05-01 · 기준 릴리스에 따라 다름 원문은 최신 ABAP 기준 · 확인일 2026-10-25
이 글은 위 원문을 읽고 한국어로 요약·재구성한 글이며 번역본이 아니에요. 원문의 저작권은 작성자와 SAP에 있어요.
원문은 CC BY 3.0 라이선스(https://creativecommons.org/licenses/by/3.0/)로 공개된 자료예요. 이 글은 내용을 한국어로 줄이고 순서를 바꾼 변경본이며, 원저작자가 이 글을 보증하지 않아요.
설정과 화면은 릴리스마다 달라요. 적용하기 전에 원문과 SAP Help Portal, 관련 SAP Note에서 최신 내용을 확인해 주세요.
SAP와 SAP 제품명은 SAP SE의 상표예요. 바로투입은 SAP와 관련이 없어요.
댓글 0
아직 댓글이 없어요.
로그인하고 댓글 쓰기