0v0__DEV

[06] FREE 구문 본문

ABAP project

[06] FREE 구문

0v0_삐약 2024. 8. 7. 23:45
728x90

1. 문제 상황

돋보기 버튼을 누르면 각 행에 해당하는 데이터가 팝업창으로 보여져야 함.

첫 번째 행을 눌러도 두 번째 행을 눌러도 계속 같은 데이터가 display 되는 문제가 발생.

디버깅을 하면 분명히

선택한 행에 대한 데이터가 인터널 테이블에 담기는데, 화면상으로는 맨 처음에 클릭했던 행의 데이터만 출력됨 

 

1행 데이터 = A
2행 데이터 = B 라고 할 때,

[ITAB]
1행 선택 > A 
2행 선택 > B
[ALV DISPLAY]
1행 선택 >A 
2행 선택 >A


 

2. 문제 원인 

POP UP스크린을 나갈 때, FREE 해주지 않고 그냥 스크린만 빠져나감. 

나는 어차피 핫스팟클릭을 하면, 인터널 테이블을 refresh 하고 새롭게 데이터를 담고, 새롭게 ALV를 뿌려주니까 

FREE 안써도 상관없다고 생각함(사실상 누락...FREE를 제대로 이해하지 못한 탓) 

 

3. 해결 방법

스크린을 빠져나올 때, CALL METHOD gird->free 구문으로 해결!


그렇다면 FREE가 무엇일까! 

인터널 테이블을 초기화 하는 구문에는 

1. CLEAR 

2. REFRESH

3. FREE 가 있다. 

각 차이점은 아래와 같다.

  CLEAR REFRESH FREE
헤더O 헤더만 삭제 바디 삭제 바디 삭제
헤더X 바디 삭제 바디 삭제 바디 삭제
메모리 메모리 공간 반환, 처음 정보 삭제 X 데이터만 삭제, 메모리 공간은 유지 메모리 반환 

 

이처럼 FREE의 특징은 메모리를 반환한다는 것!

 

FREE를 사용하지 않으면 새 ALV를 생성할 때에도 이전에 사용했던 객체들이 메모리에 남아있게 된다.

FREE 구문을 사용하면, ALV 객체에 할당 된 메모리를 명시적으로 해제하고 메모리 누수를 방지할 수 있다! 

728x90

'ABAP project' 카테고리의 다른 글

[08]CTS 병합  (0) 2024.09.03
[07] ABAP 동적 WEHRE조건, Select 필드  (1) 2024.08.14
[05] CL_GUI_ALV_GRID 의 Attributes  (0) 2024.07.29
[04] Currency Conversion SQL Func  (2) 2024.07.24
[03] do_sum 필드 & hotspot_click Event  (2) 2024.07.22