✅ 핵심 요약: CONTINUE 문

📌 CONTINUE란?

  • 반복(loop)문 안에서 해당 반복을 즉시 건너뛰고, 다음 반복으로 넘어가게 하는 명령어.
  • if 조건에 따라 특정 조건일 때는 나머지 코드를 실행하지 않고 다음 루프로 바로 점프.
  • loop는 종료되지 않음, 반복 조건이 계속 만족되면 계속 반복함.

왜 CONTINUE가 필요한가?

  • 반복 중간에 조건에 맞는 특정 경우만 건너뛰고 싶은 상황이 많음. 예: 2번째 반복에서는 출력하지 않기, 특정 값 제외하기 등

🧪 예시 코드

 
 
REPORT z_continue_demo.

DATA: a TYPE i.

DO 15 TIMES.
  a = a + 1.

  IF sy-index = 2.
    CONTINUE.  " 2번째 루프는 건너뜀
  ENDIF.

  WRITE: / 'Loop iteration:', a.
ENDDO.
 
 

🔍 결과 출력

 
Loop iteration: 1
Loop iteration: 3
Loop iteration: 4
...
Loop iteration: 15

 

→ a = 2일 때 출력이 건너뛰어져서 2는 안 나옴!


💡 참고

  • sy-index는 현재 몇 번째 루프인지 알려주는 시스템 필드
  • CONTINUE는 반복 안에 남은 코드 실행을 무시하고, 바로 DO or WHILE의 처음으로 점프

 

*&---------------------------------------------------------------------*
*& Report  Z_ITERATIONS_1                                              *
*&---------------------------------------------------------------------*

REPORT  z_iterations_1.

TABLES: zemployees.

" 특정 조건으로 SELECT 반복
SELECT * FROM zemployees WHERE surname = 'MILLS'.
  WRITE: / zemployees.
ENDSELECT.

DATA: a TYPE i,
      b TYPE i,
      c TYPE i.

a = 0.
c = 0.

" -----------------------------
" DO 루프 예제
DO 15 TIMES.
  a = a + 1.
  WRITE: / 'Outer Loop cycle: ', a.
  b = 0.
  DO 10 TIMES.
    b = b + 1.
    WRITE: / 'Inner Loop cycle:     ', b.
  ENDDO.
  c = c + b.
ENDDO.
c = c + a.
WRITE: / 'Total Iterations (DO): ', c.

" -----------------------------
" WHILE 루프 예제
a = 0.
b = 0.
c = 0.

WHILE a <> 15.
  a = a + 1.
  WRITE: / 'Outer Loop cycle: ', a.
  b = 0.
  WHILE b <> 10.
    b = b + 1.
    WRITE: / 'Inner Loop cycle:     ', b.
  ENDWHILE.
  c = c + b.
ENDWHILE.
c = c + a.
WRITE: / 'Total Iterations (WHILE): ', c.

🧪 실행 시 예시 출력

Outer Loop cycle: 1
Inner Loop cycle:     1
Inner Loop cycle:     2
...
Outer Loop cycle: 15
Inner Loop cycle:     10
Total Iterations (DO): 165

Outer Loop cycle: 1
Inner Loop cycle:     1
...
Total Iterations (WHILE): 165

 

 

✅ 핵심 요약

🌱 변수 설명

  • a: 바깥(outer) 루프의 카운터
  • b: 안쪽(inner) 루프의 카운터
  • c: 전체 반복 횟수를 누적한 값

🔁 루프 흐름 정리

  1. a를 기준으로 바깥 while 루프를 실행
    WHILE a < 15.
  2. 바깥 루프 안에서:
    • b를 0으로 초기화
    • WHILE b < 10인 동안:
      • b를 출력
      • b를 증가
      • c = c + b 로 누적합 추가
    • 안쪽 루프가 끝나면:
      • a 값을 1 증가
      • c = c + a 로 추가 누적
  3. 최종적으로 c는 전체 루프 횟수를 반영하며 출력됨.

🧮 실행 결과 예시

  • 바깥 루프는 a가 0부터 14까지 총 15번
  • 안쪽 루프는 매번 b가 0부터 9까지 총 10번 실행
  • 그래서 총 반복 횟수는: 15 * 10 = 150
  • 각 루프에서 c에 값을 누적시키므로, 결과는 단순히 150이 아니라 각 b와 a의 합이 누적된 165가 출력됨 (코드에서 그처럼 설정됨)

✅ 주의할 점

  • b를 매 바깥 루프 안에서 초기화하는 이유: 매번 0부터 시작하려고
  • b = b + 1 없으면 무한 루프 발생!
  • WHILE 문은 조건이 만족할 때만 실행하므로 조건을 잘 설계해야 함

✅ WHILE 루프란?

  • 조건이 참일 동안 계속 반복되는 루프
  • 루프를 돌기 전에 조건을 먼저 확인
  • DO ... ENDDO.와 달리 종료 조건이 없으면 무한 루프가 되지 않음

✅ 기본 구조

WHILE 조건.
  " 반복 실행할 코드
ENDWHILE.

✅ 예제 코드

DATA: a TYPE i VALUE 0.

WHILE a <> 15.
  WRITE: / 'a =', a.
  a = a + 1.
ENDWHILE.

🔍 결과

a = 0
a = 1
a = 2
...
a = 14

a = 15이 되면 조건 a <> 15는 거짓(False)이므로 루프 종료.


✅ 주의할 점

  • 루프 안에서 반드시 a = a + 1. 같은 조건 변화를 주어야 함
  • 안 그러면 조건이 영원히 참(a <> 15)이어서 무한 루프 발생

🆚 DO 루프와 차이점


구분 Do Loops While Loops
종료 방식 고정 횟수 (DO 10 TIMES) 조건 만족 시까지
SY-INDEX 사용 O O
무한 루프 위험 있음 (종료조건 없을 때) 있음 (조건 안 바뀔 때)

 

🧠 핵심 주제: 중첩 반복문 (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 전체 반복 횟수 세기 위한 용도
성능 주의 너무 많은 반복은 피하거나 개선 필요

 

🔁 DO 반복문(Loop)이란?


ABAP에서 특정 코드를 여러 번 반복 실행하고 싶을 때 사용하는 반복문.

✅ 기본 구조

 
 
DO. 
	"반복 실행할 코드" .
ENDDO.
 

⚠️ 주의!
조건을 넣지 않으면 무한 반복이 돼서 프로그램이 멈출 수 있음 -> overflow!


🧨 무한 루프 예시

DO. 
	WRITE: / 'HELLO'. 
ENDDO.
  • 이 코드는 "HELLO"를 끝없이 출력해서 멈출 수 없다.
  • 실행하면 ABAP 프로그램이 멈추고 수동으로 종료해야 함

✅ 안전한 반복: DO n TIMES

DO 15 TIMES. 
	WRITE: / 'HELLO'. 
ENDDO.
  • HELLO를 정확히 15번만 출력
  • n TIMES는 반복 횟수를 명확하게 지정하는 방법

🧮 카운터 예제 (변수 + 시스템 변수)

DATA a TYPE i.
a = 0.

DO 15 TIMES.
  a = a + 1.
  WRITE: / 'My counter:', a, 'SY-INDEX:', sy-index.
ENDDO.
=> 1부터 15출력!
 
 
🔎 여기에 나오는 포인트

요소 설명
a 사용자가 선언한 변수. 직접 1씩 증가시킴
sy-index 시스템에서 제공하는 루프 횟수 자동 추적 변수
WRITE 현재 루프에서 두 변수의 값을 출력
  • sy-index는 loop 시작할 때마다 자동으로 1 증가
  • a는 수동으로 a = a + 1 해줘야 함
  • 둘 다 출력해서 비교 가능

🔚 정리

기능설명
DO ... ENDDO 기본 반복문. 무조건 반복 (조건 없음)
DO n TIMES n번만 반복. 안전하고 추천되는 방식
sy-index 시스템 내장 루프 카운터 (자동 증가)
a = a + 1 직접 만든 카운터 (수동 증가)

📌 실전 팁!

  • 무조건 DO 10 TIMES.처럼 횟수 제한을 두고 사용해야함 
  • sy-index를 활용하면 디버깅하거나, 반복 횟수를 확인할 때 유용⭐️

✅ 반복문(Iteration Statements) 이란?

같은 코드를 여러 번 실행하고 싶을 때 사용하는 제어 구조야
ABAP에서는 다음과 같은 반복문을 사용할 수 있음

  • DO ... ENDDO
  • WHILE ... ENDWHILE
  • LOOP AT ... ENDLOOP

🔁 SELECT ... ENDSELECT

테이블의 여러 레코드를 반복해서 처리할 때 사용하는 반복문

🔹 기본 구조

SELECT * FROM zemployees.
  WRITE: / zemployees-surname.
ENDSELECT.
 
 
  • SELECT * → zemployees 테이블의 모든 필드를 선택
  • WRITE → 각 레코드의 데이터를 출력
  • ENDSELECT → 반복문의 끝. 레코드가 없을 때까지 반복

💡 SELECT 문도 반복문이다?

SELECT ... ENDSELECT는 ABAP에서 자동으로 레코드를 한 줄씩 읽어가면서 반복하는 구조이기 때문에 반복문처럼 동작함!


🎯 조건을 붙인 반복문

반복을 돌 때 조건을 추가하면 특정 조건을 만족하는 레코드만 반복 처리할 수 있다.

예시:

SELECT * FROM zemployees WHERE surname = 'kondi'.
  WRITE: / zemployees-surname.
ENDSELECT.

→ surname이 "kondi"인 레코드만 출력해.


🔍 실습 예

  1. 처음엔 SELECT * FROM zemployees.로 전체 레코드 출력
  2. 조건 WHERE surname = 'mm' 추가했더니 레코드가 없어서 출력 안 됨
  3. 테이블을 확인하고 'kondi'로 바꾸니 정상 출력됨

📌 요약


내용 설명
SELECT ... ENDSELECT 테이블 레코드를 반복 처리하는 루프
조건 추가 WHERE절로 원하는 데이터만 필터링 가능
반복 종료 시점 더 이상 읽을 레코드가 없을 때까지 자동 반복
쓰임새 조회 결과 반복 출력, 계산, 조건 분기 등에 활용

 

잘 출력이 되는 걸 확인했다!

✅ CASE 문이란?

CASE문은 하나의 변수 값에 따라 여러 경우를 분기해서 실행할 수 있도록 도와주는 제어문


🧱 CASE 문 기본 구조

CASE 변수. WHEN 값1. " 값1일 때 실행할 코드 WHEN 값2. " 값2일 때 실행할 코드 ... 
WHEN OTHERS. " 나머지 경우 ENDCASE.
 

💡 예제

DATA: surname TYPE c LENGTH 10. 
surname = 'SMITH'. 
CASE surname. 
WHEN 'SMITH'. 
WRITE: 'You won a car!'. 
	WHEN 'JONES'. 
    	WRITE: 'You won a plane!'. 
    WHEN 'GREEN'. 
    	WRITE: 'You won a boat!'. 
    WHEN OTHERS. 
    	WRITE: 'You won nothing...'. 
ENDCASE.

결과
You won a car!


✅ CASE vs IF 비교


  CASE IF
비교 대상 단일 변수만 비교 다양한 조건 조합 가능
가독성 매우 뛰어남 조건 많아질수록 복잡해짐
복잡한 논리 X (단순 비교) O (AND, OR, 중첩 등)
기본 사용 예 정해진 값 분기 범위, 여러 조건 검사

🔁 중첩 CASE 문도 가능

CASE 문 안에 또 다른 CASE 문을 넣을 수도 있음

CASE surname.
  WHEN 'SMITH'.
    CASE forename.
      WHEN 'JOHN'.
        WRITE: 'You won a car!'.
      WHEN OTHERS.
        WRITE: 'Close, but no car!'.
    ENDCASE.
  WHEN OTHERS.
    WRITE: 'No prize.'.
ENDCASE.

✅ 팁: 가독성 유지

  • IF문보다 CASE가 읽기 쉬워서 값 하나를 기준으로 분기할 때 추천.
  • 조건이 복잡하거나 여러 필드를 동시에 비교할 때는 IF, ELSE IF 사용.

 

✅ 중첩 IF문 (Nested IF)이란?

한 조건이 참일 때, 그 안에서 또 다른 조건을 검사하는 구조다.
즉, 조건 안에 조건이 있는 구조!


📌 기본 구조

IF 조건1.
  IF 조건2.
    " 조건1 AND 조건2가 모두 참일 때 실행
  ELSE.
    " 조건1은 참이지만, 조건2는 거짓일 때 실행
  ENDIF.
ELSE.
  " 조건1이 거짓일 때 실행
ENDIF.

💡 예제 코드

 
DATA: surname  TYPE c LENGTH 10,
      forename TYPE c LENGTH 10.

surname  = 'SMITH'.
forename = 'JOHN'.

IF surname = 'SMITH'.
  IF forename = 'JOHN'.
    WRITE: 'You won a CAR!'.
  ELSE.
    WRITE: 'So close!'.
  ENDIF.
ELSE.
  WRITE: 'Better luck next time!'.
ENDIF.

 

출력:
You won a CAR!


✅ 포인트 정리


Nested IF IF 안에 또 다른 IF문을 넣는 구조
조건 분기 강화 가능 이름이 SMITH이고, 이름이 JOHN일 때만 등 복잡한 조건 검사 가능
Endif 중요 각각의 IF에는 반드시 ENDIF.가 있어야 해요
얼마든지 중첩 가능 2단, 3단 이상 중첩도 가능하지만 가독성은 주의해야 함

🔁 중첩 vs 논리연산자

 
IF surname = 'SMITH' AND forename = 'JOHN'. WRITE: 'CAR!'. ENDIF.

이렇게 논리 연산자(AND) 를 쓰면 중첩 없이도 가능하지만,
중간에 다른 조건별 분기 처리를 하고 싶을 땐 중첩 IF가 유리할 수 있다.

✅ ABAP 조건문에서 사용하는 비교 연산자 (Relational Operators)

표준연산자 의미 abap 키워드
= 같다 EQ
<> 같지 않다 NE
< 작다 LT
> 크다 GT
<= 작거나 같다 LE
>= 크거나 같다 GE

⚠️ 키워드 방식(EQ, NE 등)은 예전 방식이고, 지금은 보통 =, <> 등 표준 방식이 더 많이 쓰임.


🔗 논리 연산자 (Logical Operators)


연산자 의미 사용예시
AND 그리고 IF a = b AND c = d.
OR 또는 IF a = b OR c = d.
NOT ~가 아니다 IF NOT a = b.

 


🧩 예시 코드

 
IF surname = 'SMITH' AND forename = 'JOHN'. WRITE: 'This is John Smith'. ENDIF.

또는

IF surname = 'SMITH' OR surname = 'BROWN'. WRITE: 'Common surname'. ENDIF.

✨ 요약

  • ABAP에서도 다양한 조건 연산자 사용 가능!
  • AND, OR, NOT을 통해 여러 조건을 조합 가능
  • EQ, NE, LT 등의 키워드 방식은 가능하지만 덜 권장됨 → 되도록 표준 연산자(=, <> 등) 사용

✅ 핵심 주제: IF 조건문 (Control Structures)

ABAP 프로그램에서 조건에 따라 다른 동작을 하게 만들기 위해 사용하는 것이 IF 문.


🧩 예제 흐름 정리

1. 프로그램 복사

  • 기존 프로그램 Z_OPENSQL_1을 복사해서 Z_LOGIC_1으로 만들고,
  • 그 안에서 논리 흐름을 실습해보는 방식으로 설명이 시작됨.

2. 조건문 기본 구조 설명

abap
CopyEdit
`IF condition.`
 - 조건이 참일 때 실행
`ELSEIF another_condition.`
- " 다른 조건이 참일 때 실행
ELSE. "
모든 조건이 거짓일 때 실행
ENDIF.

3. 예제 코드 흐름

 
DATA surname TYPE c LENGTH 15.

surname = 'SMITH'.

IF surname = 'SMITH'.
  WRITE: 'You''ve won a car'.
ELSEIF surname = 'BROWN'.
  WRITE: 'You''ve won a boat'.
ELSEIF surname = 'JONES'.
  WRITE: 'You''ve won a plane'.
ELSEIF surname = 'ANDREWS'.
  WRITE: 'You''ve won a house'.
ELSE.
  WRITE: 'Unlucky, you go home empty handed'.
ENDIF.

 

👀 실행 결과

  • surname = 'SMITH' → "You've won a car"
  • surname = 'BROWN' → "You've won a boat"
  • surname = 'ANDREWS' → "You've won a house"
  • surname = 'KIM' → "Unlucky, you go home empty handed"

📌 요약

 

IF 조건이 이면 해당 블록 실행
ELSEIF 첫 조건이 거짓이고, 이 조건이 참이면 실행
ELSE 위 조건들 전부 거짓이면 실행
ENDIF 조건문의

🧠 왜 중요할까?

  • 조건에 따라 프로그램 흐름을 제어할 수 있음 (분기)
  • 복잡한 로직을 처리할 때 가장 기본적이고 강력한 도구
  • 특히 ABAP에서는 데이터 처리 로직, 오류 처리, 화면 표시 조건 등에 자주 사용됨

 

 

결과값 : money!

 

+ Recent posts