Skip to content

Latest commit

Β 

History

History
169 lines (130 loc) Β· 5.49 KB

Clean Code & Refactoring.md

File metadata and controls

169 lines (130 loc) Β· 5.49 KB

ν΄λ¦°μ½”λ“œμ™€ λ¦¬νŒ©ν† λ§

ν΄λ¦°μ½”λ“œλž€?

가독성이 높은 μ½”λ“œ. λͺ¨λ“  νŒ€μ›μ΄ μ΄ν•΄ν•˜κΈ° 쉽도둝 μž‘μ„±λœ μ½”λ“œλ₯Ό λ§ν•œλ‹€.


클린 코딩을 ν•΄μ•Όν•˜λŠ” 이유?

κΉ”λ”ν•œ μ½”λ“œλŠ” μ½”λ“œ 리뷰, μ½”λ“œ νŒŒμ•…κ³Ό 디버깅 μ‹œκ°„μ„ λ‹¨μΆ•μ‹œν‚¨λ‹€.
μ‹œκ°„μ€ μžμ›μ΄λ©°, μ΄λŠ” 돈으둜 이어진닀. λ”°λΌμ„œ μ½”λ“œ μœ μ§€λ³΄μˆ˜ μ‹œκ°„μ„ μ€„μ΄κ²Œ 되면 λΉ„μ¦ˆλ‹ˆμŠ€ λ°Έλ₯˜λ₯Ό μ°½μΆœν•  수 있게 λœλ‹€.

클린 코딩을 ν•˜μ§€ μ•ŠμœΌλ©΄, "technical dept"κ°€ λ°œμƒν•œλ‹€.

*) technical deptλž€?
ν˜„ μ‹œμ μ—μ„œ 더 λ‚˜μ€ 접근방식보닀 더 μ‰¬μš΄ μ†”λ£¨μ…˜μ„ μ±„νƒν•¨μœΌλ‘œμ¨ λ°œμƒλ˜λŠ” 좔가적인 μž¬μž‘μ—…μ˜ λΉ„μš©


클린 μ½”λ“œ κ΅¬ν˜„ 방법

  1. 넀이밍

    • λ³€μˆ˜λͺ…/ν•¨μˆ˜λͺ…을 보고 역할을 μœ μΆ”ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€.
        int AAA(int a, int b){ //역할을 μœ μΆ”ν•  수 μ—†λŠ” ν•¨μˆ˜ 이름
            return a+b;
        }
    
        int sum(int a, int b){ //μ˜¬λ°”λ₯Έ μ½”λ“œ
            return a+b;
        }
    
    • λ³€μˆ˜ 이름을 지을 λ•Œ, CamelCaseλ₯Ό μ‚¬μš©ν•˜μž.
        int customerid; //μΉ΄λ©œμΌ€μ΄μŠ€κ°€ 적용 μ•ˆ 된 λ³€μˆ˜λͺ…
        int customerId; //μΉ΄λ©œμΌ€μ΄μŠ€ 적용
    
    • μƒμˆ˜λŠ” μ „λΆ€ λŒ€λ¬Έμžμ΄λ©°, λ„μ–΄μ“°κΈ°λŠ” μ–Έλ”μŠ€μ½”μ–΄(_)둜 ν‘œν˜„ν•œλ‹€.
        final int MAX_COUNT = 1000;
    
    • 클래슀 이름은 λͺ…μ‚¬λ‚˜ λͺ…사ꡬ가 μ ν•©ν•˜λ‹€. ex) Customer, Account
    • ν•¨μˆ˜ 이름은 λ™μ‚¬λ‚˜ 동사ꡬ가 μ ν•©ν•˜λ‹€. ex) getName, isChecked, Calculate
  2. ν•¨μˆ˜ μž‘μ„±

    • ν•˜λ‚˜μ˜ ν•¨μˆ˜λŠ” ν•˜λ‚˜μ˜ 일만 ν•΄μ•Ό ν•œλ‹€.
    • νŒŒλΌλ―Έν„°μ˜ κ°œμˆ˜λŠ” μ μ„μˆ˜λ‘ μ’‹λ‹€.
    • ν•¨μˆ˜κ°€ μ—¬λŸ¬κ°œλΌλ©΄, 가독성을 μœ„ν•΄ ν•¨μˆ˜μ™€ ν•¨μˆ˜ 사이에 간격을 두어야 ν•œλ‹€.
  3. 주석 μž‘μ„±

    • 주석은 μ—†λŠ” 것이 μ’‹λ‹€. μ΅œλŒ€ν•œ μ½”λ“œλ§Œ 보고도 이해할 수 μžˆλ„λ‘ μž‘μ„±ν•œλ‹€.
    • todo 주석을 μ΄μš©ν•˜μ—¬ 상황을 κΈ°λ‘ν•œλ‹€.
  4. 였λ₯˜ 처리

    • 가정문보단 try-catch문을 μ‚¬μš©ν•˜μž
    • null보단 빈 λ§€μ—΄μ΄λ‚˜ 0κ³Ό 같은 값을 λ°˜ν™˜ν•˜μž. null pointer exception의 λ°œμƒμ„ 막을 수 μžˆλ‹€.
  5. λ‹¨μœ„ ν…ŒμŠ€νŠΈ

    • κ°€λŠ₯ν•œ λͺ¨λ“  ν•¨μˆ˜λ₯Ό ν…ŒμŠ€νŠΈ ν•˜μž.
  6. 클래슀 생성

    • 클래슀의 ν¬κΈ°λŠ” μž‘μ„μˆ˜λ‘ μ’‹λ‹€. ν•˜λ‚˜μ˜ ν΄λž˜μŠ€λŠ” ν•˜λ‚˜μ˜ μ—­ν• λ§Œ κ°€μ Έμ•Ό ν•œλ‹€.
    • μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ˜ μˆ˜κ°€ μž‘μ•„μ•Ό ν•œλ‹€.
  7. 흐름 λ”°λ₯΄κΈ°

    • μ™Όμͺ½μ—λŠ” λ³€μˆ˜λ₯Ό, 였λ₯Έμͺ½μ—λŠ” μƒμˆ˜λ₯Ό 두고 λΉ„κ΅ν•œλ‹€.
    if(length >= 10)
    
    • 뢀정이 μ•„λ‹Œ 긍정을 λ‹€λ£¨μž
    if( a == b ) { // a!=bλŠ” λΆ€μ •
    
    } else {
    
    }
    



λ¦¬νŒ©ν† λ§μ΄λž€?

이미 μž‘μ„±μ„ μ™„λ£Œν•œ μ½”λ“œλ₯Ό 더 λ‚˜μ€ μ½”λ“œλ‘œ κ°œμ„ μ‹œν‚€κΈ° μœ„ν•΄ λ‚΄λΆ€ ꡬ쑰λ₯Ό λ³€κ²½ν•˜λŠ” 것. 단, μ™ΈλΆ€ λ™μž‘μ€ κ°™μ•„μ•Ό ν•œλ‹€.


λ¦¬νŒ©ν† λ§μ„ ν•˜λŠ” 이유?

μ½”λ“œμ˜ 가독성을 높이고, μœ μ§€λ³΄μˆ˜λ₯Ό 더 μ‰½κ²Œ ν•˜κΈ° μœ„ν•¨.


λ¦¬νŒ©ν† λ§μ΄ ν•„μš”ν•œ μ‹œκΈ°

  • 같은 μ½”λ“œκ°€ μ„Έ 번 이상 반볡이 될 λ•Œ
  • μƒˆλ‘œμš΄ κΈ°λŠ₯을 μΆ”κ°€ν•  λ•Œ
  • μ½”λ“œ 리뷰λ₯Ό ν•  λ•Œ
  • 버그λ₯Ό μˆ˜μ •ν•  λ•Œ

λ¦¬νŒ©ν† λ§μ„ ν•˜μ§€ 말아야 ν•  μ‹œκΈ°

  • μ½”λ“œλ₯Ό μ²˜μŒλΆ€ν„° λ‹€μ‹œ μž‘μ„±ν•΄μ•Ό ν•  λ•Œ
  • μž‘μ„± 마감일이 κ°€κΉŒμšΈ λ•Œ

λ¦¬νŒ©ν† λ§ μ£Όμš” 기법

ꡬ뢄기법섀λͺ…
λ©”μ†Œλ“œ 정리Extract Method그룹으둜 묢을 수 μžˆλŠ” μ½”λ“œ 쑰각이 μžˆλ‹€λ©΄ λ©”μ†Œλ“œλ‘œ μΆ”μΆœ
Replace Temp With Query μˆ˜μ‹μ„ λ©”μ†Œλ“œλ‘œ λ§Œλ“€κ³ , μž„μ‹œ λ³€μˆ˜ μ°Έμ‘°λ₯Ό λ©”μ†Œλ“œ 호좜둜 μˆ˜μ •
객체간 κΈ°λŠ₯ 이동Move Methodλ©”μ†Œλ“œκ°€ μžμ‹ μ΄ μ •μ˜λœ ν΄λž˜μŠ€λ³΄λ‹€ λ‹€λ₯Έ ν΄λž˜μŠ€μ—μ„œ λ©”μ†Œλ“œλ₯Ό 더 많이 μ‚¬μš©ν•œλ‹€λ©΄ λ©”μ†Œλ“œλ₯Ό 이동
Extract Method두 개의 ν΄λž˜μŠ€κ°€ ν•΄μ•Ό ν•  일을 ν•˜λ‚˜μ˜ ν΄λž˜μŠ€κ°€ ν•˜κ³  μžˆλ‹€λ©΄ 클래슀λ₯Ό 뢄리
λ©”μ†Œλ“œ 호좜 λ‹¨μˆœν™”Rename Methodλ©”μ†Œλ“œ 이름이 λͺ©μ  ν‘œν˜„μ„ λͺ» ν•  λ•Œ 이름 λ³€κ²½
Remove ParameterλΆˆν•„μš”ν•œ νŒŒλΌλ―Έν„° 제거
클래슀/λ©”μ†Œλ“œ μΌλ°˜ν™”Full up field두 μ„œλΈŒ ν΄λž˜μŠ€κ°€ λ™μΌν•œ ν•„λ“œλ₯Ό 가지고 μžˆλ‹€λ©΄ κ·Έ ν•„λ“œλ₯Ό 수퍼 클래슀둜 올림
Full up Methodλ™μΌν•œ 일을 ν•˜λŠ” λ©”μ†Œλ“œλ₯Ό μ—¬λŸ¬ μ„œλΈŒ ν΄λž˜μŠ€μ—μ„œ 가지고 μžˆλ‹€λ©΄ 이 λ©”μ†Œλ“œλ₯Ό 수퍼 클래슀둜 올림
기타Encapsulation field Public ν•„λ“œκ°€ μžˆλŠ” 경우 κ·Έ ν•„λ“œλ₯Ό Private둜 λ§Œλ“€κ³  μ ‘κ·Όμž 제곡
Decompose Conditional 쑰건 논리λ₯Ό λ‹¨μˆœν™”ν•˜μ—¬ ν‘œν˜„

λ¦¬νŒ©ν† λ§ 절차

  1. λ¦¬νŒ©ν† λ§ λŒ€μƒ 식별
  2. ν…ŒμŠ€νŠΈλ₯Ό ν†΅ν•œ 적용
    • μž‘μ€ λ‹¨μœ„λ³„λ‘œ λ¦¬νŒ©ν† λ§ ν›„, μž‘λ™ 확인 -> μž‘λ™μ΄ 될 경우 λ‹€μŒ 단계, μ•ˆ 될 경우 undo



클린 μ½”λ“œμ™€ λ¦¬νŒ©ν† λ§μ˜ 차이

λ¦¬νŒ©ν† λ§μ΄ 더 큰 의미λ₯Ό 가진닀.
클린 μ½”λ“œλ₯Ό μœ„ν•œ λ¦¬νŒ©ν† λ§μ΄λΌκ³  ν•  수 μžˆλ‹€.

  • ν΄λ¦°μ½”λ“œ
    • 가독성을 높이기 μœ„ν•œ μž‘μ—…
    • μ„€κ³„μ‹œμ— ν•„μš”
  • λ¦¬νŒ©ν† λ§
    • 클린 μ½”λ“œλ₯Ό ν¬ν•¨ν•œ μœ μ§€λ³΄μˆ˜λ₯Ό μœ„ν•œ μ½”λ“œ κ°œμ„ 
    • 결과물이 λ‚˜μ˜¨ 이후 μΆ”κ°€μž‘μ—…μ‹œμ— μ‹€ν–‰