반응형
ABAP에서 서브루틴 내부에서 자주 사용되는 로컬 변수 선언 방식에는 STATICS
와 DATA
가 있다. 비슷해 보이지만 값의 초기화 시점과 메모리 유지 방식에서 큰 차이가 있다.
이번 글에서는 STATICS
와 DATA
를 각각 선언한 예제 코드를 보며 차이점을 비교하고 어떤 선언 방식을 사용하는 것이 적절한지 알아보자.
🧩 변수 선언이 중요한 이유
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는 서브루틴 내부에서만 유지되는 정적 변수이다. 한 번 선언되면 프로그램이 끝날 때까지 값이 유지되며, 서브루틴이 다시 호출되더라도 초기화되지 않는다.
- 명시적인 초기화 없이 기본값으로 초기화된다.
반응형
'SAP' 카테고리의 다른 글
ABAP 시스템 변수로 날짜와 시간 다루기 - sy-datum, sy-datlo, sy-datar, sy-uzeit, sy-timlo (0) | 2025.05.30 |
---|---|
ABAP CX_SY_DYN_CALL_ILLEGAL_FUNC - 부동소수점 계산과 동적 프로그래밍의 대소문자 구문 오류 해결 (0) | 2025.05.28 |
ABAP Fixed Point Arithmetic에 따른 TYPE P 계산 차이 완전 정리 (0) | 2025.05.27 |
ABAP CX_SY_CONVERSION_OVERFLOW - Packed Type(P) 변수 오버플로우 에러 해결 (1) | 2025.05.26 |
BP (Business Partner) | 비즈니스 파트너 마스터 데이터 관리 (0) | 2025.04.10 |