[SAP/ABAP] Local 변수 대신 Statics 사용하기 - Binary Search 퍼포먼스 높이는 방법

2025. 4. 27. 09:00SAP - ABAP

PERFORM문 안에 들어가면 그 안에서는 지역변수가 선언이 되지만

Statics의 경우는 FORM 문 안에서 지역변수 임에도 정적으로 선언이 된다.

 

그리고 Local 영역에서 한 번 선언한 Statics 변수는 로컬에서 다음 참조 시 재정의되지않는다.

또한 이전 지정된 값을 보존하기 때문에 Binary search 보다 퍼포먼스 측면에서 더욱 낫다고 한다.

 

[예시 1]

TEST_A는 지역변수, TEST_B는 Statics로 변수를 선언해주었다.

 

DO 5 TIMES.

PERFORM TEST_CASE.

ENDDO.

FORM TEST_CASE.

DATA TEST_A TYPE I VALUE 1.

STATICS TEST_B TYPE I VALUE 1.

TEST_A = TEST_A + 1.

TEST_B = TEST_B + 1.

ENDFORM.

TEST_A는 매번마다 2 라는 값이 들어가겠지만

TEST_B는 5회동안 2, 3, 4, 5, 6 이 들어가게 된다.

 

왜냐하면 일반적인 지역변수 선언은 서브루틴이 끝나면 메모리 공간에서 삭제가 되고

STATICS를 통한 변수 선언은 메모리를 적재시켜놓기 때문!

 


[예시 2]

데이터 양이 방대한 TABLE에서 데이터를 매번 SELECT해야할 때,

STATICS를 사용하여 처음 1회 SELECT 해놓으면

다음 차례에서는 지속적으로 메모리공간에 담아놓기 때문에

SELECT를 하지 않아도 기 추출해놓은 데이터를 가지고 활용할 수 있다는 점에서 퍼포먼스를 높이고 부하를 줄여준다,


FORM
TEST_CASE2 USING PV_A

CHANGING PV_B.

STATICS: LT_TABLE TYPE HASHED TABLE OF GT_TABLE

WITH UNIQUE KEY A

WITH HEADER LINE.

READ TABLE LT_TABLE WITH KEY A = PV_A.

IF SY-SUBRC = 0.

PV_B = LT_TABLE-B.

ELSE.

SELECT SINGLE A B

INTO (LT_TABLE-A, LT_TABLE-B)

FROM TABLE

WHERE A EQ PV_A.

IF SY-SUBRC = 0.

PV_B = LT_TABLE-B.

INSERT LT_TABLE INTO TABLE LT_TABLE.

ENDIF.

ENDIF.

ENDFORM.