Study/CleanCode

[Study][CleanCode - 2] 5. ν˜•μ‹ λ§žμΆ”κΈ°

youn12 2022. 7. 13. 15:57
πŸ“‹ λͺ©μ°¨.

5. ν˜•μ‹ λ§žμΆ”κΈ°
    .μ μ ˆν•œ ν–‰ 길이λ₯Ό μœ μ§€ν•˜λΌ
    .μ‹ λ¬Έ κΈ°μ‚¬μ²˜λŸΌ μž‘μ„±ν•˜λΌ
    .κ°œλ…μ€ 빈 ν–‰(쀄 λ°”κΏˆ)으둜 λΆ„λ¦¬ν•˜λΌ
    .μ„Έλ‘œ 밀집도
    .수직 거리
    .λ³€μˆ˜ μ„ μ–Έ
    .μΈμŠ€ν„΄μŠ€ λ³€μˆ˜
    .쒅속 ν•¨μˆ˜
    .κ°œλ…μ  μœ μ‚¬μ„±
    .κ°€λ‘œ ν˜•μ‹ λ§žμΆ”κΈ°
    .κ°€λ‘œ 곡백과 밀집도
    .λ“€μ—¬μ“°κΈ° λ¬΄μ‹œν•˜κΈ°
    .νŒ€ κ·œμΉ™


βœ”οΈ λ‚΄μš©.

 

5. ν˜•μ‹ λ§žμΆ”κΈ°

 

 μ½”λ“œ ν˜•μ‹μ€ μ€‘μš”ν•˜λ‹€! λ„ˆλ¬΄ μ€‘μš”ν•΄μ„œ λ¬΄μ‹œν•˜κΈ° μ–΄λ ΅λ‹€.
λ„ˆλ¬΄ μ€‘μš”ν•˜κΈ° λ•Œλ¬Έμ— μœ΅ν†΅μ„± μ—†μ΄ λ§Ήλͺ©μ μœΌλ‘œ λ”°λ₯΄λ©΄ μ•ˆ λœλ‹€. μ½”λ“œ ν˜•μ‹μ€ μ˜μ‚¬μ†Œν†΅μ˜ μΌν™˜μ΄λ‹€.
μ˜μ‚¬μ†Œν†΅μ€ μ „λ¬Έ κ°œλ°œμžμ˜ μΌμ°¨μ μΈ μ˜λ¬΄λ‹€.

 μ–΄μ©Œλ©΄ 'λŒμ•„κ°€λŠ” μ½”λ“œκ°€'κ°€ μ „λ¬Έ 개발자의 일차적인 의무라 여길지도 λͺ¨λ₯΄μ§€λ§Œ 책을 읽으며 생각이 λ°”λ€Œμ—ˆκΈ°λ₯Ό λ°”λž€λ‹€.

 μ˜€λŠ˜ κ΅¬ν˜„ν•œ κΈ°λŠ₯이 λ‹€μŒ λ²„μ „μ—μ„œ λ°”λ€” ν™•λ₯ μ€ μ•„μ£Ό λ†’λ‹€. 그런데 였늘 κ΅¬ν˜„ν•œ μ½”λ“œμ˜ 가독성은 μ•žμœΌλ‘œ λ°”λ€” μ½”λ“œμ˜ ν’ˆμ§ˆμ— μ§€λŒ€ν•œ 영ν–₯을 λ―ΈμΉœλ‹€. 였랜 μ‹œκ°„μ΄ μ§€λ‚˜ μ›λž˜ μ½”λ“œμ˜ 흔적을 더 이상 찾아보기 μ–΄λ €μšΈ μ •λ„λ‘œ μ½”λ“œκ°€ λ°”λ€Œμ–΄λ„ 맨 처음 μž‘μ•„λ†“μ€ κ΅¬ν˜„ μŠ€νƒ€μΌκ³Ό 가독성 μˆ˜μ€€μ€ μœ μ§€λ³΄μˆ˜ μš©μ΄μ„±κ³Ό ν™•μž₯성에 계속 영ν–₯을 λ―ΈμΉœλ‹€.
μ›λž˜ μ½”λ“œλŠ” μ‚¬λΌμ§ˆμ§€λΌλ„ κ°œλ°œμžμ˜ μŠ€νƒ€μΌκ³Ό κ·œμœ¨μ€ μ‚¬λΌμ§€μ§€ μ•ŠλŠ”λ‹€.

 


 

.μ μ ˆν•œ ν–‰ 길이λ₯Ό μœ μ§€ν•˜λΌ.

 

일반적으둜 큰 νŒŒμΌλ³΄λ‹€ μž‘μ€ 파일이 μ΄ν•΄ν•˜κΈ° 쉽닀.

 


 

.μ‹ λ¬Έ κΈ°μ‚¬μ²˜λŸΌ μž‘μ„±ν•˜λΌ

 

 λ…μžλŠ” μœ„μ—μ„œ μ•„λž˜λ‘œ κΈ°μ‚¬λ₯Ό μ½λŠ”λ‹€ κΈ°μ‚¬μ˜ κ²½μš° μ΅œμƒλ‹¨μ— κΈ°μ‚¬λ₯Ό μš”μ•½ν•˜λŠ” 'ν‘œμ œ'κ°€ λ‚˜μ˜¨λ‹€.
μ­‰ λ‚΄λ €κ°€λ©΄μ„œ μ½μ„μˆ˜λ‘ μ„Έμ„Έν•œ λ‚΄μš©λ“€μ΄ λ‚˜μ˜€κ²Œ λœλ‹€.

 

 μ†ŒμŠ€ νŒŒμΌλ„ λΉ„μŠ·ν•˜κ²Œ μž‘μ„±ν•œλ‹€. 이름은 κ°„λ‹¨ν•˜λ©΄μ„œλ„ μ„€λͺ…이 κ°€λŠ₯ν•˜κ²Œ μ§“λŠ”λ‹€.

μ΄λ¦„λ§ŒμœΌλ‘œ μ˜¬λ°”λ₯Έ λͺ¨λ“ˆμ„ μ‚΄νŽ΄λ³΄κ³  μžˆλŠ”μ§€ μ•„λ‹Œμ§€λ₯Ό νŒλ‹¨ν•  μ •λ„λ‘œ μ‹ κ²½ μ¨μ„œ μ§“λŠ”λ‹€.
첫 λΆ€λΆ„은 κ³ μ°¨μ› κ°œλ…κ³Ό μ•Œκ³ λ¦¬μ¦˜μ„ μ„€λͺ…ν•œλ‹€. μ•„λž˜λ‘œ λ‚΄λ €κ°ˆμˆ˜λ‘ μ˜λ„λ₯Ό μ„Έμ„Έν•˜κ²Œ λ¬˜μ‚¬ν•œλ‹€.
λ§ˆμ§€λ§‰μ—λŠ” κ°€μž₯ μ € 차원 ν•¨μˆ˜μ™€ μ„ΈλΆ€ λ‚΄μ—­μ΄ λ‚˜μ˜¨λ‹€.



.κ°œλ…μ€ 빈 ν–‰(쀄 λ°”κΏˆ)으둜 λΆ„λ¦¬ν•˜λΌ

 

 κ±°μ˜ λͺ¨λ“  μ½”λ“œλŠ” μ™Όμͺ½μ—μ„œ μ˜€λ₯Έμͺ½μœΌλ‘œ κ·Έλ¦¬κ³  μœ„μ—μ„œ μ•„λž˜λ‘œ μ½νžŒλ‹€.
각 ν–‰μ€ μˆ˜μ‹μ΄λ‚˜ μ ˆμ„ λ‚˜νƒ€λ‚΄κ³ , μΌλ ¨μ˜ ν–‰ λ¬ΆμŒμ€ μ™„κ²°λœ μƒκ° ν•˜λ‚˜λ₯Ό ν‘œν˜„ν•œλ‹€.
생각 μ‚¬μ΄μ—λŠ” λΉˆ ν–‰μ„ λ„£μ–΄ λΆ„리해야 λ§ˆλ•…ν•˜λ‹€.

 

 λΉˆ ν–‰μ„ λΊ„ κ²½μš° μ½”λ“œ κ°€λ…성이 ν˜„μ €ν•˜κ²Œ λ–¨μ–΄μ Έ μ’‹μ§€ μ•Šλ‹€. λ‹¨μˆœ μ€„ λ°”κΏˆ ν•˜λ‚˜λ‘œ μ˜μ—­μ„ λ‚˜λˆŒ μˆ˜ μžˆλ‹€.

 



.μ„Έλ‘œ 밀집도

 

 μ€„ λ°”κΏˆμ΄ κ°œλ…μ„ λΆ„λ¦¬ν•œλ‹€λ©΄ μ„Έλ‘œ λ°€μ§‘λ„λŠ” 연관성을 μ˜λ―Έν•œλ‹€. 즉, μ„œλ‘œ λ°€μ ‘ν•œ μ½”λ“œ ν–‰μ€ μ„Έλ‘œλ‘œ κ°€κΉŒμ΄ λ†“μ—¬μ•Ό ν•œλ‹€λŠ” λœ»μ΄λ‹€.

 

// X
/**
 * 리포터 λ¦¬μŠ€λ„ˆμ˜ 클래슀 이름
 */
private String m_className;

/**
 * 리포터 λ¦¬μŠ€λ„ˆμ˜ 속성
 */
private List<Property> m_properties = new ArrayList<Property>();


// O
private String m_className;
private List<Property> m_properties = new ArrayList<Property>();

 



.수직 거리

 

 μ‹œμŠ€ν…œμ΄ λ¬΄μ—‡μ„ ν•˜λŠ”지 μ΄ν•΄ν•˜κ³  μ‹Άμ€λ°, μ‘°κ°μ‘°κ° μ–΄λ””에 μžˆλŠ”지 μ°Ύκ³  κΈ°μ–΅ν•˜λŠλΌ μ‹œκ°„κ³Ό λ…Έλ ₯을 μ†ŒλΉ„ν•œ κ²½ν—˜μ΄ μžˆμ„ κ²ƒμ΄λ‹€.
 μ„œλ‘œ λ°€μ ‘ν•œ κ°œλ…μ€ μ„Έλ‘œλ‘œ κ°€κΉŒμ΄ 둬야 ν•œλ‹€. λ¬Όλ‘  두 κ°œλ…μ΄ μ„œλ‘œ λ‹€λ₯Έ νŒŒμΌμ— μ†ν•œλ‹€λ©΄ κ·œμΉ™μ΄ ν†΅ν•˜μ§€ μ•ŠλŠ”λ‹€.
ν•˜μ§€λ§Œ νƒ€λ‹Ήν•œ κ·Όκ±°κ°€ μ—†λ‹€λ©΄ μ„œλ‘œ λ°€μ ‘ν•œ κ°œλ…μ€ ν•œ νŒŒμΌμ— μ†ν•΄μ•Ό λ§ˆλ•…ν•˜λ‹€. μ΄κ²Œ λ°”λ‘œ protected λ³€μˆ˜λ₯Ό ν”Όν•΄μ•Ό ν•˜λŠ” μ΄μœ  μ€‘ ν•˜λ‚˜λ‹€.

 κ°™μ€ νŒŒμΌμ— μ†ν•  μ •λ„λ‘œ λ°€μ ‘ν•œ λ‘ κ°œλ…μ€ μ„Έλ‘œ κ±°λ¦¬λ‘œ μ—°κ΄€μ„±μ„ ν‘œν˜„ν•œλ‹€.
μ—¬κΈ°μ„œ μ—°κ΄€μ„±μ΄λž€ ν•œ κ°œλ…μ„ μ΄ν•΄ν•˜λŠ” λ° λ‹€λ₯Έ κ°œλ…μ΄ μ€‘μš”ν•œ μ •λ„이닀. μ—°κ΄€μ„±μ΄ κΉŠμ€ λ‘ κ°œλ…μ΄ λ©€λ¦¬ λ–¨μ–΄μ Έ μžˆμœΌλ©΄ μ½”λ“œλ₯Ό μ½λŠ” μ‚¬λžŒμ΄ μ†ŒμŠ€νŒŒμΌκ³Ό ν΄λž˜μŠ€λ₯Ό μ—¬κΈ°μ €κΈ° λ’€μ§€κ²Œ λœλ‹€.

 



.λ³€μˆ˜ μ„ μ–Έ

 

 λ³€μˆ˜λŠ” μ‚¬μš©ν•˜λŠ” μœ„μΉ˜μ— μ΅œλŒ€ν•œ κ°€κΉŒμ΄ μ„ μ–Έν•œλ‹€.
μš°λ¦¬κ°€ λ§Œλ“  ν•¨μˆ˜λŠ” λ§€μš° μ§§μœΌλ―€λ‘œ μ§€μ—­ λ³€μˆ˜λŠ” κ° ν•¨μˆ˜ λ§¨ μ²˜μŒμ— μ„ μ–Έν•œλ‹€.

루프λ₯Ό μ œμ–΄ν•˜λŠ” λ³€μˆ˜λŠ” ν”νžˆ λ£¨ν”„ λ¬Έ λ‚΄λΆ€μ— μ„ μ–Έν•œλ‹€.

μ•„μ£Ό λ“œλ¬Όμ§€λ§Œ λ‹€μ†Œ κΈ΄ ν•¨μˆ˜μ—μ„œ λΈ”둝 μƒλ‹¨μ΄λ‚˜ λ£¨ν”„ μ§μ „에 λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λŠ” μ‚¬λ‘€λ„ μžˆλ‹€.

 



.μΈμŠ€ν„΄μŠ€ λ³€μˆ˜

 

 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λŠ” ν΄λž˜μŠ€ λ§¨ μ²˜μŒμ— μ„ μ–Έν•œλ‹€. λ³€μˆ˜ κ°„에 μ„Έλ‘œλ‘œ κ±°λ¦¬λ₯Ό λ‘μ§€ μ•ŠλŠ”λ‹€.
잘 μ„€κ³„ν•œ ν΄λž˜μŠ€λŠ” λ§Žμ€(ν˜Ήμ€ λŒ€λ‹€μˆ˜) ν΄λž˜μŠ€ λ©”μ„œλ“œκ°€ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

 



.쒅속 ν•¨μˆ˜

 

 ν•œ ν•¨μˆ˜κ°€ λ‹€λ₯Έ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•œλ‹€λ©΄ λ‘ ν•¨μˆ˜λŠ” μ„Έλ‘œλ‘œ κ°€κΉŒμ΄ λ°°μΉ˜ν•œλ‹€.
λ˜ν•œ κ°€λŠ₯ν•˜λ‹€λ©΄ ν˜ΈμΆœν•˜λŠ” ν•¨μˆ˜λ₯Ό ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜λ³΄λ‹€ λ¨Όμ € λ°°μΉ˜ν•œλ‹€. κ·ΈλŸ¬λ©΄ ν”„λ‘œκ·Έλž¨μ΄ μžμ—°μŠ€λŸ½κ²Œ μ½νžŒλ‹€.
κ·œμΉ™μ„ μΌκ΄€μ μœΌλ‘œ μ μš©ν•œλ‹€λ©΄ λ…μžλŠ” λ°©κΈˆ ν˜ΈμΆœν•œ ν•¨μˆ˜κ°€ μž μ‹œ ν›„에 μ •μ˜λ˜λ¦¬λΌλŠ” μ‚¬μ‹€μ„ μ˜ˆμΈ‘ν•œλ‹€.

 



.κ°œλ…μ  μœ μ‚¬μ„±

 

 μ–΄λ–€ μ½”λ“œλŠ” μ„œλ‘œ λŒμ–΄λ‹ΉκΈ΄λ‹€. κ°œλ…μ μΈ μΉœν™”λ„κ°€ λ†’κΈ° λ•Œλ¬Έμ΄λ‹€. μΉœν™”λ„κ°€ λ†’μ„μˆ˜λ‘ μ½”λ“œλ₯Ό κ°€κΉŒμ΄ λ°°μΉ˜ν•œλ‹€.

 

 μΉœν™”도가 높은 μš”μΈμ€ μ—¬λŸ¬ κΈ°μžμ΄λ‹€.
μ•žμ„œ λ³΄μ•˜λ“―μ΄, ν•œ ν•¨μˆ˜κ°€ λ‹€λ₯Έ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•΄ μƒκΈ°λŠ” 직접적인 쒅속성이 ν•œ 예이며, λ³€μˆ˜μ™€ κ·Έ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” ν•¨μˆ˜λ„ ν•œ μ˜ˆλ‹€. κ·Έ μ™Έμ—λ„ AssertTrue, AssertFalse와 κ°™μ΄ λΉ„μŠ·ν•œ λ™μž‘을 μˆ˜ν–‰ν•˜λŠ” μΌκ΅°μ˜ ν•¨μˆ˜κ°€ μ’‹μ€ μ˜ˆμ΄λ‹€



.κ°€λ‘œ ν˜•μ‹ λ§žμΆ”κΈ°

 

 κ°œμΈμ μœΌλ‘œ 120자 μ •λ„μ˜ ν–‰κΈΈμ΄λ₯Ό μ œν•œν•œλ‹€.

 



.κ°€λ‘œ 곡백과 밀집도

 

 κ°€λ‘œλ‘œλŠ” κ³΅λ°±μ„ μ‚¬μš©ν•΄ λ°€μ ‘ν•œ κ°œλ…κ³Ό λŠμŠ¨ν•œ κ°œλ…μ„ ν‘œν˜„ν•œλ‹€.
인수 μ‚¬μ΄μ—λŠ” κ³΅λ°±μœΌλ‘œ λ³„κ°œλ‘œ λ³΄μ΄κ²Œ ν•œλ‹€.

 



.λ“€μ—¬μ“°κΈ° λ¬΄μ‹œν•˜κΈ°

 

 λ•Œλ‘œλŠ” κ°„λ‹¨ν•œ ifλ¬Έ, μ§§μ€ while λ¬Έ, μ§§μ€ ν•¨μˆ˜μ—μ„œ λ“€μ—¬ μ“°κΈ° κ·œμΉ™μ„ λ¬΄μ‹œν•˜κ³ ν”ˆ μœ ν˜Ήμ΄ μƒκΈ΄λ‹€.
이럴 κ²½μš° μ›μ μœΌλ‘œ λŒμ•„κ°€ λ“€μ—¬ μ“°κΈ°λ₯Ό λ„£μ–΄ κ·œμΉ™μ„ μœ μ§€ν•œλ‹€.

 



.νŒ€ κ·œμΉ™

 

 ν”„λ‘œκ·Έλž˜λ¨ΈλΌλ©΄ 각자 μ„ ν˜Έν•˜λŠ” κ·œμΉ™μ΄ μžˆλ‹€. ν•˜μ§€λ§Œ νŒ€μ— μ†ν•œλ‹€λ©΄ μžμ‹ μ΄ μ„ ν˜Έν•΄μ•Ό ν•  κ·œμΉ™μ€ λ°”λ‘œ νŒ€ κ·œμΉ™μ΄λ‹€.
νŒ€μ€ ν•œ 가지 κ·œμΉ™μ— ν•©μ˜ν•΄μ•Ό ν•œλ‹€. 그리고 λͺ¨λ“  νŒ€μ›μ€ κ·Έ κ·œμΉ™μ„ 따라야 ν•œλ‹€. κ·Έλž˜μ•Ό μ†Œν”„νŠΈμ›¨μ–΄κ°€ μΌκ΄€μ μΈ μŠ€νƒ€μΌμ„ λ³΄μΈλ‹€. κ°œκ°œμΈμ΄ λ”°λ‘œκ΅­λ°₯처럼 λ§˜λŒ€λ‘œ μ§œ λŒ€λŠ” μ½”λ“œλŠ” ν”Όν•΄μ•Ό ν•œλ‹€.

 μ’‹μ€ μ†Œν”„νŠΈμ›¨μ–΄ μ‹œμŠ€ν…œμ€ 읽기 μ‰¬μš΄ λ¬Έμ„œλ‘œ μ΄λ€„μ§„λ‹€λŠ” 사싀을 κΈ°μ–΅ν•˜κΈ° λ°”λž€λ‹€. μŠ€νƒ€μΌμ€ 일관적이고 λ§€λ„λŸ¬μ›Œμ•Ό ν•œλ‹€. ν•œ μ†ŒμŠ€ νŒŒμΌμ—μ„œ 봀던 ν˜•μ‹μ΄ λ‹€λ₯Έ μ†ŒμŠ€ νŒŒμΌμ—λ„ μ“°μ΄λ¦¬λΌλŠ” 신뒰감을 λ…μžμ—κ²Œ μ€˜μ•Ό ν•œλ‹€. μ˜¨κ°– μŠ€νƒ€μΌμ„ λ’€μ„žμ–΄ μ†ŒμŠ€ μ½”λ“œλ₯Ό ν•„μš” μ΄μƒμœΌλ‘œ λ³΅μž‘ν•˜κ²Œ λ§Œλ“œλŠ” μ‹€μˆ˜λŠ” λ°˜λ“œμ‹œ ν”Όν•œλ‹€.


 

πŸ“ λŠλ‚€μ .

- 각각의 ν˜•μ‹μ„ λ§žμΆ”λŠ” κ·œμΉ™μ— λŒ€ν•΄ 많이 μ•Œκ²Œ 된 것 κ°™λ‹€.
- κ°€μž₯ 크게 와닿은 λΆ€λΆ„μœΌλ‘œ 'νŒ€ κ·œμΉ™'인데 κ²°κ΅­ νŒ€ 내에 μ†ν•΄μ§ˆ 것이라면 νŒ€ κ·œμΉ™μ„ 따라야 ν•˜λŠ” 게 μ˜³μ€ 것 κ°™λ‹€.
ν˜„μž¬ 개개인 λ”°λ‘œκ΅­λ°₯처럼 λ§˜λŒ€λ‘œ 짜고 μžˆλŠ” 상황에 μ†ν•΄μžˆκΈ° λ•Œλ¬Έμ— κ°€μž₯ μ™€λ‹Ώμ•˜λ‹€...