λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

ABAP Implimentation (πŸ› οΈμ‹€λ¬΄)/Clean ABAP

ABAP Clean Code : λ³€μˆ˜μ™€ λ¦¬ν„°λŸ΄ - Boolean (True or False)

이 글은 γ€ŽClean ABAP – A Style Guide for Developers』 μ„œμ  (written by Klaus Haeuptle, Florian Hoffmann, Rodrigo Jordão, Michel Martin, Anagha Ravinarayan, Kai Westerholz) 을 μ°Έκ³ ν•˜μ—¬ μž‘μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€. ν•΄λ‹Ή λ‚΄μš©μ„ μ’€ 더 쉽고 이해할 수 μžˆλ„λ‘ μš”μ•½/정리 및 개인적인 μ˜κ²¬μ„ λΆ™μ—¬ μž¬κ΅¬μ„±ν•œ  ν¬μŠ€νŒ…μž…λ‹ˆλ‹€. 

 

 

ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ Boolean 값은 κ°€μž₯ 기본적인 데이터 νƒ€μž… 쀑 ν•˜λ‚˜μ΄λ‹€. λ‹¨μˆœνžˆ μ°Έ(True) λ˜λŠ” κ±°μ§“(False)을 ν‘œν˜„ν•˜λŠ” 이 값은 μ½”λ“œμ˜ 흐름을 μ œμ–΄ν•˜λŠ” μ‘°κ±΄λ¬Έμ—μ„œ 핡심 역할을 ν•œλ‹€. ABAPμ—μ„œ Boolean 값을 μ–΄λ–»κ²Œ μ‚¬μš©ν•  수 μžˆλŠ”μ§€, 그리고 μ–΄λ–€ 점을 μ£Όμ˜ν•΄μ•Ό ν•˜λŠ”μ§€ μ˜ˆμ‹œμ™€ ν•¨κ»˜ μ•Œμ•„λ³΄μž.


1. ABAP μ—μ„œ μ‚¬μš©λ˜λŠ” boolean νƒ€μž…

  • ABAP_BOOL : " ABAP " TYPE GROUP에 μ •μ˜λœ νƒ€μž…
  • ABAP_BOOLEAN : ABAP DICTIONARY 에 Element둜 μ •μ˜λœ νƒ€μž… 

2κ°€μ§€ νƒ€μž… λͺ¨λ‘ CHAR1이며, 기본적으둜 'X' λ˜λŠ” ' '(곡백)을 톡해 μ°Έ/거짓을 ν‘œν˜„ν•œλ‹€. ν˜„μž¬λŠ” ABAP_BOOLEAN을 많이 μ‚¬μš©ν•˜κ³  μžˆλŠ” 좔세이닀. 


2. BOOELAN 에 μ‚¬μš©λ˜λŠ” μƒμˆ˜ 

"ABAP" TYPE GROUP을 보면 BOOLEAN에 κ΄€λ ¨λœ μƒμˆ˜λ₯Ό 확인할 수 μžˆλ‹€. 

< ABAP TYPE GROUP μ„ μ–ΈλΆ€ >

 

μƒμˆ˜μ΄λ¦„ κ°’ μ„€λͺ… 
abap_true 'X' μ°Έ
abap_false ' ' κ±°μ§“ (곡백이며, μ΄ˆκΈ°κ°’κ³Ό λ™μΌ)
abap_undefined '-' μ •μ˜λ˜μ§€ μ•Šμ€ μƒνƒœ (λͺ¨ν˜Έν•œ μƒνƒœλ₯Ό ν‘œν˜„ν•  λ•Œ μ‚¬μš©)

 

πŸ’‘ 클린 ABAP κ°€μ΄λ“œλΌμΈμ—μ„œλŠ” abap_undefined μ‚¬μš©μ„ ꢌμž₯ν•˜μ§€ μ•ŠλŠ”λ‹€. μ½”λ“œμ˜ 가독성과 μœ μ§€λ³΄μˆ˜μ„±μ„ 높이기 μœ„ν•΄ abap_true와 abap_false만 μ‚¬μš©ν•˜λŠ” 것이 μ’‹λ‹€.

3. BOOELAN 에 μ˜¬λ°”λ₯Έ μ‚¬μš©λ²•

βœ… 값을 직접 λΉ„κ΅ν•˜μ§€ 말고, μƒμˆ˜λ₯Ό μ‚¬μš©ν•˜μž

❌ Bad Case
IF lv_error_flag = 'X'.

βœ… Good Case
IF lv_error_flag = abap_true.

βœ… IS INITIAL λŒ€μ‹  abap_falseλ₯Ό μ‚¬μš©ν•˜μž.

❌ Bad Case
IF lv_error_flag IS INITIAL.

βœ… Good Case
IF lv_error_flag = abap_false.

 

IS INITIAL은 κ³΅λ°± μ—¬λΆ€λ₯Ό ν™•μΈν•˜μ§€λ§Œ, Boolean λ§₯λ½μ—μ„œλŠ” abap_falseκ°€ μ˜λ―Έμ μœΌλ‘œ λ” μ •ν™•ν•˜λ‹€. 

πŸ’‘λ‹¨μˆœν•œ True/Falseκ°€ μ•„λ‹Œ κ²½κ³ , μ€€λΉ„, 성곡, 재처리 같은 ꡬ체적인 μ—¬λŸ¬ μƒνƒœλ₯Ό κ°€μ§„λ‹€λ©΄ Boolean 보닀 μ—΄κ±°ν˜•(enumeration)을 μ‚¬μš©ν•˜λŠ” 것이 훨씬 λͺ…ν™•ν•˜λ‹€.

4. ABAPμ—μ„œ κ°„λ‹¨ν•œ 쑰건은 XSDBOOL둜 더 κΉ”λ”ν•˜κ²Œ μ²˜λ¦¬ν•˜μž.

Boolean 값을 λ‹€λ£° λ•Œ κ°€μž₯ ν”ν•˜κ²Œ λ°œμƒν•˜λŠ” νŒ¨ν„΄μ€ "쑰건에 따라 μ°Έ λ˜λŠ” 거짓을 λ³€μˆ˜μ— ν• λ‹Ή"ν•˜λŠ” μ½”λ“œμ΄λ‹€. 그런데 이 λ‹¨μˆœν•œ μž‘μ—…μ΄ 생각보닀 λΆˆν•„μš”ν•˜κ²Œ μž₯ν™©ν•΄μ§ˆ 수 μžˆλ‹€.

❌ Bad Case
IF log_messages IS INITIAL.
  has_entries = abap_false.
ELSE.
  has_entries = abap_true.
ENDIF.

 

이 μ½”λ“œκ°€ ν‹€λ¦° 건 μ•„λ‹ˆμ§€λ§Œ, 쑰건 ν•˜λ‚˜λ§Œ νŒλ‹¨ν•˜λŠ” 데 μ½”λ“œκ°€ λ„ˆλ¬΄ κΈΈλ‹€. 특히 반볡적으둜 이런 νŒ¨ν„΄μ΄ λ“±μž₯ν•˜λ©΄ μ½”λ“œ 가독성과 μœ μ§€λ³΄μˆ˜μ„±μ΄ λ–¨μ–΄μ§€κ²Œ λœλ‹€. 

βœ… Good Case
DATA(has_entries) = XSDBOOL( log_messages IS NOT INITIAL ).

 

ABAPμ—μ„œλŠ” XSDBOOL ν•¨μˆ˜λ₯Ό μ œκ³΅ν•΄μ„œ μœ„μ™€ 같이 훨씬 κ°„λ‹¨ν•˜κ³  μ§κ΄€μ μœΌλ‘œ μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆλ‹€.

  • abap_bool νƒ€μž…μœΌλ‘œ μžλ™ λ³€ν™˜λ˜κΈ° λ•Œλ¬Έμ— λ³„λ„μ˜ νƒ€μž… μ„ μ–Έμ΄ ν•„μš” μ—†μŒ
  • 가독성 ν–₯상: μ‘°κ±΄μ‹μ΄ λ°”λ‘œ λ³΄μž„
  • μ½”λ“œκ°€ μ§§κ³  λͺ…ν™•
πŸ’‘ ABAP 7.40 μ΄μƒμ—μ„œλŠ” COND 식을 μ‚¬μš©ν•΄ 쑰건에 따라 값을 λ°˜ν™˜ν•  수 μžˆμ§€λ§Œ, νƒ€μž…μ„ λͺ…μ‹œμ μœΌλ‘œ 적어야 ν•˜κ³ , false에 ν•΄λ‹Ήν•˜λŠ” 값을 μƒλž΅ν•˜λ©΄ μ΄ˆκΈ°κ°’μΈ 곡백(abap_false)이 μžλ™μœΌλ‘œ ν• λ‹Ήλœλ‹€.