ABAP 구문의 CLEAR, FREE, REFRESH에 대한 비교 설명


프로그래밍 언어마다 변수를 선언하고, 변수에 값을 입력하고, 그리고 변수를 초기화하는 구문(Keyword)을 가지고 있습니다.

SAP ABAP에서도 마찬가지로 변수를 선언하고, 초기화하는 구문(Keyword)를 가지고 있습니다.

이번 글에서 설명할 내용은 ABAP에서 변수를 초기화하는 대표적인 3개의 키워드, 즉 ABAP 구문의 CLEAR, FREE, REFRESH에 대한 비교 설명을 해 보고자 합니다.

여기서 말하는 변수에는 일반적인 문자형 변수, 숫자형 변수 이외에 Structure, 인터널테이블(Internal Table)까지 포함합니다.

ABAP 프로그램을 개발해서 실행하다 보면 생각했던대로 인터널테이블이 초기화되지 않아 잘못된 실행 결과를 보여줄 때가 있습니다.

인터널테이블을 클리어 했다고 생각했는데 인터널테이블 본문(Body)이 그대로 남아 있다든지, 본문을 클리어해서 인터널테이블이 깨끗이 비워진 상태라고 생각했는데 Header에 데이터가 남아 있어 잘못 처리되는 결과를 마주할 때가 있습니다. 

사실 이런 구문오류는 오류의 원인을 찾기도 쉽지 않습니다.

CLEAR, REFRESH, FREE에 대한 정확한 의미와 사용법을 알고 사용하면 구문 오류의 발생을 줄일 수 있게 됩니다.

ABAP 구문의 CLEAR, FREE, REFRESH에 대한 비교 설명

ABAP의 CLEAR 문

CLEAR는 변수를 초기화는 가장 일반적인 키워드 입니다.

– 사용법 : CLEAR variable.
            CELAR <itab>.
            CLEAR <itab[]>.

  • 변수의 메모리 내용을 지우게 됩니다. 즉, 변수가 초기화 됩니다.
  • 변수가 할당 받은 메모리는 그대로 유지됩니다. 
  • Header가 있는 인터널테이블인 경우 Header만 지워지게 됩니다.
  • Header가 없는 itab일 경우 Body(본문)가 지워지게 됩니다.
  • Header가 있는 itab의 Body를 지우기 위해서는 CLEAR itab[] 이라고 구문을 사용하면 됩니다.

※ 인터널테이블의 Header와 Body를 모두 지우기 위해서는 아래 구문처럼 CLEAR를 각각 기술해 주어야 합니다.

  • CLEAR itab.     “Header 삭제
  • CLEAR itab[].   “Body 삭제

ABAP의 REFRESH 문

REFRESH는 CLEAR와 비슷하게 사용되지만 인터널테이블의 바디(Body)를 지울 때 사용합니다.

– 사용법 : REFRESH <itab>.

  • 인터널테이블(Internal Table)의 본문(Body), 즉 모든 항목이 지워지게 됩니다. 
  • 할당 받은 메모리는 그대로 유지됩니다.
  • 헤더가 있는 itab의 Body만 지워지고, Header의 데이터는 그대로 남아 있습니다.

※ 인터널테이블의 Header와 Body를 모두 지우기 위해서는 아래 구문처럼 CLEAR문과 함께 기술해 주어야 합니다.

  • CLEAR itab.      “Header 삭제
  • REFRESH itab.   “Body 삭제

ABAP의 FREE 문

FREE는 변수의 내용을 지우고 할당된 메모리를 해제할 때 사용합니다.

– 사용법 : FREE variable.
            FREE <itab>.

  • 일반적인 변수에서는 CLEAR와 같은 역할이 수행되고, Header가 있는 인터널테이블인 경우 REFRESH와 같은 역할이 수행됩니다.
  • Structure를 포함한 일반적인 변수에 FREE를 사용하면 CLEAR 후 메모리를 해제합니다.
  • 헤더가 있는 인터널테이블에서 FREE를 사용하면 REFRESH 후 메모리를 해제합니다.
  • CLEAR와 REFRESH는 메모리가 유지되지만 FREE는 할당된 메모리가 해제됩니다. 





이 글이 도움이 되었기를 바랍니다. ^-^


답글 남기기