ASAP

[ABAP] CLEAR vs REFRESH vs FREE 본문

SAP(ABAP)/문법

[ABAP] CLEAR vs REFRESH vs FREE

에이SAP 2022. 8. 22. 16:16
728x90

ABAP개발을 하다보면, 인터널테이블의 Header/ Body를 지워야 할 때가 있다.

종류는 CLEAR, REFRESH, FREE가 있을텐데,

처음에는 이 세 개가 헷갈려 잘못 사용하는 경우도 있을 것이다. 

헷갈려 하는 분들을 위해 이 글을 정리한다. 

 

물론,

이 사용법을 제대로 숙지하기 위해서는 인터널테이블에서 헤더라인이 있는 경우와 없는 경우의 차이점부터 제대로 알아야 한다.

 

1. CLEAR

1-1) 헤더라인이 있는 경우 

CLEAR itab    : Header line만 지움( Body는 안 지움 )

CLEAR itab[ ] :  Body만 지움

 

1-2) 헤더라인이 없는 경우

CLEAR itab : Body를 지움 

 

2. REFRESH

CLEAR와 비슷하나, 테이블의 body만 지운다.

REFRESH itab = CLEAR itab[ ].

 

3. FREE

REFRESH와 비슷하나, 테이블 body만 참조하는 거 외에

FREE는 테이블 body에 할당된 메모리를 초기화시킨다.

다시 인터널테이블에 데이터를 넣으려면, 새로운 메모리가 할당돼야 한다.

 

실제로 디버깅을 걸어서 확인해보면 하단 이미지와 같이 할당된 메모리가 삭제되는 걸 확인할 수 있다.

FREE 명령어 전
FREE 명령어 후

정리

C1/Case 1 [헤더라인 없는 경우] DATA: itab1 TYPE STANDARD TABLE OF sflight. 

C2/Case 2 [헤더라인 있는 경우] DATA: itab2 TYPE sflight OCCURS 0 WITH HEADER LINE.

  테이블 내용
초기화
Work Area
/ Structure 참조
테이블 Content
/ 테이블 Body 참조
테이블 Header
메모리 초기화
테이블 Body
메모리 초기화
CLEAR [C1] CLEAR itab
[C2] CLEAR itab[ ]
[C1] x
[C2] CLEAR itab
[C1] O
[C2] CLEAR itab[ ]
x x
REFRESH REFRESH itab x O x x
FREE FREE itab x O x O

http://sap-isu-abap.blogspot.com/2010/01/clear-vs-refresh-vs-free.html

728x90