반응형

ABAP에서 서브루틴 내부에서 자주 사용되는 로컬 변수 선언 방식에는 STATICSDATA가 있다. 비슷해 보이지만 값의 초기화 시점과 메모리 유지 방식에서 큰 차이가 있다.

이번 글에서는 STATICSDATA를 각각 선언한 예제 코드를 보며 차이점을 비교하고 어떤 선언 방식을 사용하는 것이 적절한지 알아보자.

🧩 변수 선언이 중요한 이유

ABAP에서 변수 선언은 단순히 데이터 저장 수단을 넘어서 프로그램의 동작 방식과 밀접한 연관이 있다. 특히 서브루틴 안에서 선언되는 변수는 호출 시마다 값이 초기화되는지, 유지되는지에 따라 프로그램의 흐름이 완전히 달라질 수 있다.

🔍 STATICS와 DATA 뭐가 다를까?

  • STATICS는 선언된 서브루틴 또는 메서드 내에서만 유효하지만, 프로그램 실행 중 값이 유지된다.
  • 반면 DATA는 서브루틴이 호출될 때마다 새로 생성되고 초기화된다.

🛠️ 예제1. STATICS 선언

DO 3 TIMES.
  PERFORM call_subr.
ENDDO.

FORM call_subr.
  STATICS lv_val TYPE i.
  lv_val = lv_val + 1.
  WRITE :/ 'STATIC Variable:', lv_val.
ENDFORM.

* 결과
* STATIC: 1  
* STATIC: 2  
* STATIC: 3

💡 상태 유지가 필요한 경우에는 STATICS를 선언하는 것이 유리하다.

🛠️ 예제2. DATA 선언

DO 3 TIMES.
  PERFORM call_data.
ENDDO.

FORM call_data.
  DATA lv_cnt TYPE i.
  lv_cnt = lv_cnt + 1.
  WRITE: / 'DATA:', lv_cnt.
ENDFORM.

* 결과
* DATA: 1  
* DATA: 1  
* DATA: 1

💡 매번 새로운 값으로 계산해야 하는 로직에는 DATA를 선언하는 것이 유리하다.

🔍 기본 개념 및 코드 분석

1. PERFORM call_subr. : 서브루틴 호출

  • STATICS : 루프가 도는 동안 한 번 설정한 값이 유지된다. (1 → 2 → 3)
  • DATA : DATA 구문으로 변수를 선언하게 되면 Local 변수는 서브루틴이 호출될 때마다 값이 초기화된다. (1 → 1 → 1)

2. 서브루틴: 함수와 유사하며 모듈형 프로그래밍을 위해 사용

  • 서브루틴은 ABAP에서 자주 반복되는 코드를 모듈화할 수 있도록 해주는 구조이다. FORM ... ENDFORM. 구문으로 감싸서 정의하며 호출 시 PERFORM을 사용한다.

3. STATICS lv_val TYPE i. : 정적변수 선언

  • STATICS는 서브루틴 내부에서만 유지되는 정적 변수이다. 한 번 선언되면 프로그램이 끝날 때까지 값이 유지되며, 서브루틴이 다시 호출되더라도 초기화되지 않는다.
  • 명시적인 초기화 없이 기본값으로 초기화된다.
반응형

+ Recent posts