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

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

ABAP Clean Code : Naming 쒋은 이름 μ§“κΈ° 2편

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

 

 

πŸ”—ABAP Clean Code : Naming 쒋은 이름 μ§“κΈ° 1편


4. ν΄λž˜μŠ€λŠ” λͺ…사λ₯Ό λ©”μ„œλ“œμ—λŠ” 동사λ₯Ό μ‚¬μš©ν•˜μž.

  • 클래슀(CLASS)λŠ” 객체 κ·Έ 자체λ₯Ό ν‘œν˜„ν•˜κΈ° λ•Œλ¬Έμ— λͺ…사 λ˜λŠ” λͺ…사ꡬ(Noun phrase)λ₯Ό μ‚¬μš©ν•˜μ—¬ 이름을 μ§“λŠ”λ‹€. 클래슀 이름은 무엇(what)을 λ‚˜νƒ€λ‚΄λŠ”μ§€ λͺ…ν™•ν•΄μ•Ό ν•œλ‹€. 
❌ Bad Case
CLASS manage_customer  →  ν΄λž˜μŠ€λŠ” λ™μ‚¬λ‘œ μ‹œμž‘ν•˜λ©΄ μ•ˆ 됨
CLASS read_sales_orders  →  λ™μ‚¬λŠ” λ©”μ„œλ“œμ—μ„œ μ“°λŠ” 것이 적절

βœ… Good Case
CLASS customer_manager  →  고객 정보λ₯Ό κ΄€λ¦¬ν•˜λŠ” 클래슀
CLASS log_manager            →  둜그λ₯Ό κ΄€λ¦¬ν•˜λŠ” 클래슀 

 

  • λ©”μ„œλ“œ(METHODS)λŠ” 객체가 μˆ˜ν–‰ν•  수 μžˆλŠ” ν–‰λ™μ΄λ‚˜ κΈ°λŠ₯, μž‘μ—…(action)을 λ‚˜νƒ€λ‚΄λ―€λ‘œ, 항상 동사 λ˜λŠ” 동사ꡬ(Verb phrase)둜 이름 μ§“λŠ”λ‹€.
❌ Bad Case
METHODS customer_data   →  동사가 μ—†μŒ
METHODS message_adder  →  λͺ…μ‚¬λ‘œ λ©”μ„œλ“œλ₯Ό μ •μ˜ν•˜λ©΄ μ•ˆ 됨

βœ… Good Case
METHODS get_customer_info  →  고객 데이터λ₯Ό κ°€μ Έμ˜€λŠ” λ©”μ„œλ“œ
METHODS add_message           →  λ©”μ‹œμ§€λ₯Ό μΆ”κ°€ν•˜λŠ” λ©”μ„œλ“œ

 

  • λ°˜ν™˜κ°’μ΄ Boolean(True or False)인 λ©”μ„œλ“œλŠ” is λ˜λŠ” has 같은 λ™μ‚¬λ‘œ μ‹œμž‘ν•˜λ©΄ λ”μš± 읽기 쉽닀. 질문 ν˜•νƒœλ‘œ μ½νžˆλ„λ‘ λ§Œλ“œλŠ” 것이 가독성 μΈ‘λ©΄μ—μ„œ 효과적이기 λ•Œλ¬Έμ΄λ‹€.
❌ Bad Case
METHODS empty  →  μ˜λ―Έκ°€ λͺ…ν™•ν•˜μ§€ μ•ŠμŒ
METHODS approval_status  →  μƒνƒœλ₯Ό λœ»ν•˜λŠ” λͺ…μ‚¬λŠ” ν˜Όλž€ 유발

βœ… Good Case
METHODS has_approval  →  μ£Όλ¬Έμ΄ μŠΉμΈλ˜μ—ˆλŠ”μ§€ ν™•μΈν•˜λŠ” λ©”μ„œλ“œ

μ˜ˆμ‹œ:
IF order->has_approval( ).
" 승인된 주문 처리
ENDIF.

 

πŸ’‘ν•¨μˆ˜(Function) λ˜ν•œ λ©”μ„œλ“œ(Method)와 λ™μΌν•˜κ²Œ 행동을 λ‚˜νƒ€λ‚΄λ―€λ‘œ, 동사 ν˜•νƒœλ‘œ 이름 μ§“λŠ” 게 λ°”λžŒμ§ν•˜λ‹€. 


5. Noisy Words ( μ†ŒμŒ 단어 )λŠ” ν”Όν•˜μž.

μ†ŒμŒ λ‹¨μ–΄λŠ” λ³€μˆ˜λͺ…μ΄λ‚˜ λ©”μ„œλ“œλͺ… 등에 자주 μ“°μ΄μ§€λ§Œ, μ‹€μ œλ‘œλŠ” μ•„λ¬΄λŸ° μ˜λ―Έλ‚˜ κ°€μΉ˜λ₯Ό μ „λ‹¬ν•˜μ§€ λͺ»ν•˜λŠ” 단어λ₯Ό λ§ν•œλ‹€.
말 κ·ΈλŒ€λ‘œ "없어도 λ˜λŠ” 단어", λ˜λŠ” "μ½”λ“œμ˜ 흐름을 λ°©ν•΄ν•˜λŠ” 단어"이닀.

Noisy Word 의미 μ—†λŠ” μ΄μœ 
data λ³€μˆ˜λ‹ˆκΉŒ λ‹Ήμ—°νžˆ λ°μ΄ν„°μž„ → λΆˆν•„μš”
object ν΄λž˜μŠ€λ“  κ΅¬μ‘°λ“  λ‹€ κ°μ²΄λ‹ˆκΉŒ μ˜λ―Έ μ—†μŒ
value λŒ€λΆ€λΆ„ λ³€μˆ˜λŠ” κ°’을 κ°€μ§€λ‹ˆκΉŒ μ˜λ―Έ μ—†μŒ
var, variable λ³€μˆ˜λͺ…에 λ˜ "λ³€μˆ˜"라고 μ“°λŠ” κ±΄ μ€‘볡

 

❌ Bad Case
DATA alv_grid_object TYPE REF TO cl_gui_alv_grid.
DATA max_count_value TYPE i.

βœ… Good Case
DATA alv_grid TYPE REF TO  cl_gui_alv_grid .
DATA max_count TYPE i.

6. μΌκ΄€λœ μš©μ–΄λ₯Ό μœ μ§€ν•˜μž.

λΉ„μŠ·ν•œ 역할을 ν•˜λŠ” μ„œλΈŒλ£¨ν‹΄ μ΄μ§€λ§Œ read, get, make λ“± μš©μ–΄κ°€ 제각각이면 ν—·κ°ˆλ¦°λ‹€.

❌ Bad Case
PERFORM make_billing.
PERFORM read_order.
PERFORM get_documents. 

βœ… Good Case
PERFORM read_billing.
PERFORM read_order.
PERFORM read_documents. 

 

πŸ‘‰ λ™μ˜μ–΄λΌλ„ ν•˜λ‚˜λ‘œ ν†΅μΌν•˜λ©΄ 가독성이 λ†’μ•„μ§€λ©°, 일관성 μžˆλŠ” μ†ŒμŠ€ μ½”λ“œκ°€ λ˜μ–΄ 깔끔해진닀. 


7. 이제 ν•„μš”ν•˜μ§€ μ•Šμ€ 헝가리 ν‘œκΈ°λ²•

헝가리 ν‘œκΈ°λ²•(Hungarian Notation)은 ν”„λ‘œκ·Έλž˜λ°μ—μ„œ λ³€μˆ˜ 이름 μ•žμ— κ·Έ λ³€μˆ˜μ˜ 'μžλ£Œν˜•'μ΄λ‚˜ 'μ˜λ„'λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 접두어(prefix)λ₯Ό λΆ™μ΄λŠ” 방식을 λ§ν•œλ‹€. μ˜ˆμ „μ—λŠ” μ½”λ“œ νŽΈμ§‘κΈ°κ°€ μ§€κΈˆμ²˜λŸΌ λ˜‘λ˜‘ν•˜μ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έμ—, λ³€μˆ˜ μ΄λ¦„λ§Œ 보고 μžλ£Œν˜•μ„ κ΅¬λΆ„ν•˜λŠ” 게 μ€‘μš”ν–ˆμ—ˆλ‹€. λ”°λΌμ„œ lv_, iv_, ev_ 같은 μ ‘λ‘μ–΄λ‘œ λ³€μˆ˜ 역할을 κ΅¬λΆ„ν–ˆμ—ˆλ‹€.

 

πŸ”Š ν˜„λŒ€ κ°œλ°œμ—μ„œμ˜ 단점

1. IDEκ°€ μžλ£Œν˜•μ„ λ°”λ‘œ 보여주기 λ•Œλ¬Έμ— ꡳ이 뢙일 ν•„μš”κ°€ μ—†μŒ

  • ADT(ABAP Development Tools)λ‚˜ Eclipse 같은 도ꡬλ₯Ό μ“°λ©΄ 마우슀만 μ˜¬λ €λ„ νƒ€μž…μ΄ λ‚˜μ˜¨λ‹€.

2. 이름이 κΈΈμ–΄μ§€κ³  의미 전달이 흐렀짐

  • lv_total_amount λ³΄λ‹€λŠ” κ·Έλƒ₯ total_amount κ°€ 더 κΉ”λ”ν•˜κ³  λͺ…ν™•ν•  수 μžˆλ‹€.

3. μ½”λ“œ λ¦¬νŒ©ν† λ§ μ‹œ ν˜Όλž€ 유발

  • μ‹€λ¬΄μ—μ„œ ν”νžˆ μ ‘ν•  수 μžˆλŠ” 문제둜 "G"(κΈ€λ‘œλ²Œ) "L"(둜컬) 접두어λ₯Ό μˆ˜μ •ν•˜μ§€ μ•Šμ•„ 잘λͺ» μ‚¬μš©λ˜λŠ” λ“± λ³€μˆ˜ νƒ€μž…μ΄ λ°”λ€Œμ—ˆλŠ”λ° μ ‘λ‘μ–΄λŠ” κ·ΈλŒ€λ‘œ 두면, 였히렀 잘λͺ»λœ 정보가 λœλ‹€.
❌ Bad Case
DATA: lv_total_amount TYPE p DECIMALS 2,
           iv_quantity TYPE i,
           ev_result TYPE p DECIMALS 2.

βœ… Good Case
DATA: total_amount TYPE p DECIMALS 2,
           quantity TYPE i,
           result TYPE p DECIMALS 2.

 

 

✍️ 헝가리 ν‘œκΈ°λ²•μ„ ν”Όν•˜λŠ” 것이 정말 쒋은 λ°©λ²•μΌκΉŒ?

λ¬Όλ‘ , μ•„μ§κΉŒμ§€λ„ λ§Žμ€ ν”„λ‘œμ νŠΈλ‚˜ μ‹œμŠ€ν…œμ—μ„œλŠ” SAP GUIλ₯Ό μ€‘μ‹¬μœΌλ‘œ κ°œλ°œν•˜λŠ” κ²½μš°κ°€ 많고, Eclipse 기반의 ADT(ABAP Development Tools)λŠ” 일뢀 ν™˜κ²½μ—μ„œλ§Œ μ‚¬μš©λ˜κ³  μžˆλŠ” 것이 ν˜„μ‹€μ΄λ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— 헝가리 ν‘œκΈ°λ²•μ— λŒ€ν•œ ν˜ΈλΆˆν˜ΈλŠ” μ—¬μ „νžˆ μ‘΄μž¬ν•˜κ³ , μ–΄λ–€ 개발 ν™˜κ²½μ΄λƒμ— 따라 κ·Έ μ‹€μš©μ„±λ„ λ‹¬λΌμ§ˆ 수 μžˆλ‹€.

πŸ””κ²°λ‘ μ μœΌλ‘œ, 개발 νŒ€μ˜ ν•©μ˜μ™€ 상황에 따라 μœ μ—°ν•˜κ²Œ μ μš©ν•˜λŠ” 것이 κ°€μž₯ λ°”λžŒμ§ν•˜λ‹€.
     πŸ“Œ ADTλ₯Ό μ‚¬μš©ν•œλ‹€λ©΄, 헝가리 ν‘œκΈ°λ²• 없이도 μΆ©λΆ„νžˆ 의미 전달이 κ°€λŠ₯ν•˜κ³  μ½”λ“œκ°€ 더 깔끔.
     πŸ“Œ SAP GUI ν™˜κ²½μ΄λΌλ©΄, μ ‘λ‘μ–΄λ‘œ 역할을 ꡬ뢄해 μ£ΌλŠ” 것이 μ‹€μš©μ μΌ μˆ˜λ„ 있음.