🧠 핵심 주제: 중첩 반복문 (Nested Do Loops)
💡 개념
- 반복문 안에 또 다른 반복문을 넣는 것을 중첩 반복문
- 예를 들어, "15번 반복하는 바깥 반복문" 안에 "10번 반복하는 내부 반복문"을 두면, 총 15 × 10 = 150번 내부 코드가 실행됨!
📘 코드 구성 요약
1. 변수 선언
DATA a TYPE i. " 외부 루프 카운터
DATA b TYPE i. " 내부 루프 카운터
DATA c TYPE i. " 총 반복 횟수 누적용
2. 외부 루프: 15번 반복
DO 15 TIMES.
a = a + 1. " 외부 루프 카운트 증가
3. 내부 루프: 10번 반복
CLEAR b. " 내부 루프 시작 전 초기화
DO 10 TIMES.
b = b + 1. " 내부 루프 카운트 증가
WRITE: / 'Inner loop', b.
ENDDO.
4. 내부 루프 완료 후 누적 처리
c = c + b. " 내부 루프 횟수를 누적
WRITE: / 'Outer loop', a.
ENDDO.
5. 총 반복 횟수 출력
WRITE: / 'Total inner loops = ', c.
6. 출력 결과
Outer loop 1
Inner loop 1
Inner loop 2
Inner loop 3
Inner loop 4
Inner loop 5
Inner loop 6
Inner loop 7
Inner loop 8
Inner loop 9
Inner loop 10
Outer loop 2
Inner loop 1
Inner loop 2
... ...
Inner loop 10
... ...
Outer loop 15
Inner loop 1
...
Inner loop 10
Total inner loops = 150
🛠 시스템 변수 SY-INDEX란?
- SY-INDEX는 각 루프에서 현재 반복 횟수를 자동으로 알려주는 SAP 내장 시스템 변수
- 내부 루프와 외부 루프 각각에서 SY-INDEX는 별도로 관리됨
루프 위치 |
sy-index의 값 |
외부 루프 |
1, 2, ..., 15 |
내부 루프 |
1, 2, ..., 10 (반복마다 초기화됨) |
⚠️ 주의할 점
- 중첩 루프는 전체 실행 횟수가 매우 많아질 수 있으니 꼭 주의해야함
- 예: DO 10_000 TIMES. 안에 DO 50_000 TIMES. → 무려 5억 번 반복!
- 현실에서는 이런 구조로 대용량 데이터 처리 시 성능 이슈 발생 가능성이 있음!
📌 정리
항목 |
설명 |
DO n TIMES. |
n번 반복 |
SY-INDEX |
루프 반복 횟수를 알려주는 시스템 변수 |
중첩 루프 |
루프 안에 또 루프. 반복 수 곱해짐 |
CLEAR |
내부 루프 변수 초기화용 |
누적 변수 c |
전체 반복 횟수 세기 위한 용도 |
성능 주의 |
너무 많은 반복은 피하거나 개선 필요 |