λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ§‘‍πŸ’Ό SAP/ABAP

[SAP ABAP] CONTINUE, STOP, CHECK, EXIT, RETURN μ΄λž€? (μ‚¬μš© μ˜ˆμ‹œ 포함)

by Jay Din 2024. 5. 30.
728x90
λ°˜μ‘ν˜•

SAP ABAPμ—μ„œ `CONTINUE`, `STOP`, `CHECK`, `EXIT`, `RETURN`은 루프 μ²˜λ¦¬λ‚˜ ν”„λ‘œκ·Έλž¨ 둜직 흐름 쀑 쑰건에 따라 νŠΉμ • 행동을 κ²°μ •ν•˜λŠ”λ° μ‚¬μš©λ©λ‹ˆλ‹€.

각 λͺ…λ Ήμ–΄λŠ” 둜직 흐름을 μ œμ–΄ν•˜λŠ”λ° 도움이 되며, 이λ₯Ό μ΄ν•΄ν•˜κΈ° μœ„ν•΄ μ˜ˆμ‹œμ™€ ν•¨κ»˜ μ„€λͺ…ν•˜κ² μŠ΅λ‹ˆλ‹€.

 

μš”μ•½ 정리

`COUTINUE` ν˜„μž¬ λ°˜λ³΅μ„ κ±΄λ„ˆλ›°κ³ , λ‹€μŒ 반볡 μ‹€ν–‰
`STOP` ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑단
(루프가 μ•„λ‹ˆλΌ ν”„λ‘œκ·Έλž¨ μˆ˜μ€€μ—μ„œ μ‚¬μš©)
`CHECK` 쑰건이 `FALSE`인 경우 ν˜„μž¬ λ°˜λ³΅μ„ μ’…λ£Œν•˜κ³  λ‹€μŒ 반볡 μ‹€ν–‰
`EXIT` 루프(LOOP)λ‚˜ DO, WHILE λ“±μ—μ„œ λΉ μ Έλ‚˜κ°
`RETURN` FROM λ˜λŠ” FUNCTION MODULEμ—μ„œ μ’…λ£Œ

 

CONTINUE

`CONTINUE` λͺ…λ Ήμ–΄λŠ” ν˜„μž¬ λ£¨ν”„μ˜ λ°˜λ³΅μ„ μ’…λ£Œν•˜κ³ , λ‹€μŒ 반볡으둜 λ„˜μ–΄κ°‘λ‹ˆλ‹€.

ν˜„μž¬ 반볡 μ΄ν›„μ˜ λͺ¨λ“  μ½”λ“œλŠ” μ‹€ν–‰λ˜μ§€ μ•Šκ³  κ±΄λ„ˆλ›°κ²Œ λ©λ‹ˆλ‹€.

 

μ˜ˆμ‹œ

DO 10 TIMES.

  IF SY-INDEX MOD 2 EQ 0.
    CONTINUE.
  ENDIF.

  WRITE: / SY-INDEX.
ENDDO.

μ‹€ν–‰ν™”λ©΄

 

`SY-INDEX` λŠ” ν˜„μž¬ λ£¨ν”„μ˜ μ‹€ν–‰ 횟수λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ‹œμŠ€ν…œ λ³€μˆ˜μž…λ‹ˆλ‹€.

μœ„ μ˜ˆμ‹œμ—μ„œ `SY-INDEX` κ°€ 짝수인 κ²½μš°μ—λŠ” `CONTINUE` λͺ…λ Ήμ–΄κ°€ μ‹€ν–‰λ˜μ–΄ ν˜„μž¬ λ°˜λ³΅μ„ κ±΄λ„ˆλ›°κ³  λ‹€μŒ 반볡으둜 λ„˜μ–΄κ°‘λ‹ˆλ‹€. λ”°λΌμ„œ,  μ§μˆ˜λŠ” 좜λ ₯λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

즉, CONTINUE 쑰건에 걸리면 LOOPλ‚΄μ˜ ν•˜μœ„ λ‘œμ§μ„ μˆ˜ν–‰ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 

 

STOP

`STOP` λͺ…λ Ήμ–΄λŠ” 싀행을 쀑단 ν•©λ‹ˆλ‹€.

λ£¨ν”„μ—μ„œ μ‚¬μš©ν•˜λ©΄ ν˜„μž¬ λ£¨ν”„μ˜ 싀행을 μ¦‰μ‹œ μ€‘λ‹¨ν•˜κ³ , 루프 블둝을 λ²—μ–΄λ‚©λ‹ˆλ‹€.

ν•˜μ§€λ§Œ,  주둜 리포트 ν”„λ‘œκ·Έλž¨μ˜ 싀행을 μ€‘λ‹¨ν•˜λŠ”λ° μ‚¬μš©λ©λ‹ˆλ‹€.

START-OF-SELECTION.

DO 10 TIMES.
  IF sy-index = 5.
    WRITE: / 'Stopping the loop at index 5'.
    STOP.
  ENDIF.
  WRITE: / 'Index:', sy-index.
ENDDO.

WRITE: / 'This line will not be executed if STOP is called above.'.


END-OF-SELECTION.
  WRITE: / 'END-OF-SELECTION'.

μ‹€ν–‰ν™”λ©΄

 

μœ„ μ˜ˆμ‹œμ—μ„œ `SY-INDEX` κ°€ 5일 λ•Œ `STOP` λͺ…λ Ήμ–΄κ°€ ν˜ΈμΆœλ˜μ–΄ `START-OF-SELECTION` ν•˜μœ„ ꡬ문을 λͺ¨λ‘ μ’…λ£Œ μ‹œν‚€κ³  κ³§λ°”λ‘œ `END-OF-SELECTION` 을 μ‹€ν–‰ν•©λ‹ˆλ‹€.

 

CHECK

`CHECK` λͺ…λ Ήμ–΄λŠ” 쑰건이 μΆ©μ‘±λ˜μ§€ μ•ŠμœΌλ©΄ ν˜„μž¬ λ£¨ν”„μ˜ λ°˜λ³΅μ„ μ’…λ£Œν•˜κ³ , λ‹€μŒ 반볡으둜 λ„˜μ–΄κ°‘λ‹ˆλ‹€.

`CHECK` λŠ” μ£Όμ–΄μ§„ 쑰건이 `FALSE` 일 λ•Œ `CONTINUE` 와 λ™μΌν•˜κ²Œ μž‘λ™ν•©λ‹ˆλ‹€.

DO 10 TIMES.

  CHECK SY-INDEX MOD 2 = 1.   " ν™€μˆ˜μΈ 경우만 ν•˜μœ„ 둜직 좜λ ₯
  WRITE: / 'Odd number:', SY-INDEX.
  
ENDDO.

μ‹€ν–‰ν™”λ©΄

 

μœ„ μ˜ˆμ‹œμ—μ„œ `SY-INDEX` κ°€ ν™€μˆ˜μΈ κ²½μš°μ—λ§Œ `WRITE` 문이 μ‹€ν–‰λ©λ‹ˆλ‹€.

`SY-INDEX` κ°€  짝수인 경우 `CHECK` 쑰건이 `FLASE` κ°€ λ˜μ–΄ ν˜„μž¬ λ°˜λ³΅μ„ μ’…λ£Œν•˜κ³  λ‹€μŒ 반볡으둜 λ„˜μ–΄κ°‘λ‹ˆλ‹€.

 

EXIT

`EXIT`은 ABAPμ—μ„œ 루프 ꡬ쑰(`LOOP`, `DO`, `WHILE`)λ‚˜ `CASE`, `IF` 블둝 μ•ˆμ—μ„œ 전체 블둝을 μ¦‰μ‹œ λΉ μ Έλ‚˜κ°€κ²Œ λ§Œλ“œλŠ” μ œμ–΄λ¬Έμž…λ‹ˆλ‹€.

즉, 쑰건이 맞으면 ν•΄λ‹Ή λ°˜λ³΅λ¬Έμ΄λ‚˜ μ œμ–΄λ¬Έμ„ κ°•μ œλ‘œ νƒˆμΆœν•˜λŠ” κΈ°λŠ₯을 ν•©λ‹ˆλ‹€.

DO 10 TIMES.

  IF SY-INDEX = 4.
    EXIT.  " ➜ 루프 쀑단
  ENDIF.

  " 루프 인덱슀 좜λ ₯
  WRITE: SY-INDEX.
  NEW-LINE.
ENDDO.

WRITE: '루프 이후 처리'.

μ‹€ν–‰ κ²°κ³Ό

 

ν˜„μž¬ μ‹€ν–‰ 쀑인 λ°˜λ³΅λ¬Έμ„ μ’…λ£Œν•˜κ³  λ‹€μŒ ꡬ문으둜 μ œμ–΄κ°€ μ΄λ™ν•©λ‹ˆλ‹€.

λ§Œμ•½ 쀑첩 루프라면, ν˜„μž¬ λ£¨ν”„λ§Œ νƒˆμΆœν•˜λ―€λ‘œ λ°”κΉ₯ μͺ½ λ£¨ν”„κΉŒμ§€ λ‚˜κ°€λŠ” μ½”λ“œλ₯Ό μΆ”κ°€ν•˜μ—¬μ•Ό ν•©λ‹ˆλ‹€.

 

RETURN

`RETURN`은 ABAPμ—μ„œ FORM, FUNCTION MODULE, METHOD λ“±μ˜ μ„œλΈŒλ£¨ν‹΄ λ˜λŠ” ν”„λ‘œμ‹œμ €λ₯Ό μ¦‰μ‹œ μ’…λ£Œ μ‹œν‚€λŠ” λͺ…λ Ήμ–΄μž…λ‹ˆλ‹€.

즉, `RETURN`이 μ‹€ν–‰λ˜λ©΄ ν•΄λ‹Ή 루틴 μ•ˆμ˜ 남은 μ½”λ“œλŠ” μ „ν˜€ μ‹€ν–‰λ˜μ§€ μ•Šκ³  λ°”λ‘œ μ’…λ£Œλ©λ‹ˆλ‹€.

DO 10 TIMES.

  IF SY-INDEX = 4.
    RETURN.  " ➜ 폼 μ’…λ£Œ
  ENDIF.

  " 루프 인덱슀 좜λ ₯
  WRITE: SY-INDEX.
  NEW-LINE.
ENDDO.

WRITE: '루프 이후 처리'.

μ‹€ν–‰ κ²°κ³Ό

 

루프 μΈλ±μŠ€κ°€ 4일 경우 `RETURN`을 λ§Œλ‚˜λŠ” μ½”λ“œμž…λ‹ˆλ‹€.

`RETURN`을 λ§Œλ‚˜λ©΄ ν˜„μž¬ μ‹€ν–‰ 쀑인 FORM/FUNCTION/METHODκ°€ μ¦‰μ‹œ μ’…λ£Œλ˜κ³  이후 라인에 μžˆλŠ” λͺ¨λ“  μ½”λ“œλŠ” λ¬΄μ‹œλ©λ‹ˆλ‹€.

`RETURN`은 ν•¨μˆ˜ μ’…λ£Œ, 쑰건 미달 처리, μ˜ˆμ™Έ 상황 μš°νšŒμ— μ•„μ£Ό μœ μš©ν•©λ‹ˆλ‹€.

ν•˜μ§€λ§Œ κ³Όλ„ν•œ RETURN λ‚¨μš©μ€ 둜직 흐름을 μ˜ˆμΈ‘ν•˜κΈ° μ–΄λ ΅κ²Œ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

 

728x90
λ°˜μ‘ν˜•