[개발 상식] ν΄λ¦°μ½”λ“œλž€?

πŸ€”ν΄λ¦° μ½”λ“œκ°€ λ¬΄μ—‡μΈκ°€μš”?

말 κ·ΈλŒ€λ‘œ 읽기 μ‰¬μš΄ μ½”λ“œκ°€ λ°”λ‘œ 클린 μ½”λ“œ.

μ €λͺ…ν•œ κ°œλ°œμžλ“€μ€ 클린 μ½”λ“œλ₯Ό λ‹€μŒκ³Ό 같이 μ •μ˜ν–ˆμŠ΅λ‹ˆλ‹€.

"클린 μ½”λ“œλŠ” λ‹¨μˆœν•˜κ³  직접적이며, μ΅œλŒ€ν•œ 읽기 쉽고 μˆ˜μ •ν•˜κΈ° μ‰½μŠ΅λ‹ˆλ‹€. 클린 μ½”λ“œλŠ” μ˜λ„λ₯Ό λͺ…ν™•ν•˜κ²Œ ν‘œν˜„ν•˜λ©°, μž‘μ„±μžμ˜ μ˜λ„λŒ€λ‘œ λ™μž‘ν•©λ‹ˆλ‹€. μ΄λŠ” 잘 μž‘μ„±λœ μ†Œμ„€μ„ μ½λŠ” κ²ƒμ²˜λŸΌ 읽기 μ¦κ±°μ›Œμ•Ό ν•©λ‹ˆλ‹€." -λ‘œλ²„νŠΈ C. λ§ˆν‹΄(Robert C. Martin)의 μ±… "Clean Code: A Handbook of Agile Software Craftsmanship”

"클린 μ½”λ“œλŠ” μ–΄λ–€ μ‚¬λžŒλ„ μˆ˜μ •ν•˜κ³  μ‹Άμ–΄ν•˜μ§€ μ•Šλ„λ‘ μž‘μ„±ν•˜λŠ” μ½”λ“œλ‹€." - μ›Œλ“œ 컀닝햄(Ward Cunningham, μ• μžμΌ(Agile) 개발 방법둠과 읡슀트림 ν”„λ‘œκ·Έλž˜λ°(Extreme Programming)의 μ°½μ‹œμž)

“μ˜λ„μ˜ λͺ…ν™•ν•œ ν‘œν˜„” 즉 μ½”λ“œλ₯Ό ν†΅ν•œ “λͺ©μ μ˜ μƒν˜Έ 곡유”라고 μƒκ°ν•©λ‹ˆλ‹€!

🀨클린 μ½”λ“œλ₯Ό μ§œλŠ” 이유?

개발 곡뢀λ₯Ό ν•œ 7κ°œμ›” λ™μ•ˆ 클린 μ½”λ“œμ˜ μ€‘μš”μ„±μ— λŒ€ν•΄μ„œ μˆ˜λ„ 없이 많이 λ“€μ—ˆκΈ°μ— ꡉμž₯히 μ€‘μš”ν•œ κ°œλ…μ΄λΌ 생각 ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ 막상 νŒ€ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λŠ” μŠ€ν„°λ””μ— λ“€μ–΄κ°€ ν˜‘μ—…μ„ ν•  λ•Œ ꡉμž₯히 λ†“μΉ˜κΈ° μ‰¬μš΄ 뢀뢄이라고 μƒκ°ν•©λ‹ˆλ‹€.

사싀 클린 μ½”λ“œλ₯Ό κ³΅λΆ€ν•˜κ³  이 글을 ν¬μŠ€νŒ…ν•˜λŠ” 이유 μ—­μ‹œ νŒ€ ν”„λ‘œμ νŠΈμ—μ„œ μ˜λ„κ°€ λͺ…ν™•ν•œ μ½”λ“œλ₯Ό μ λŠ” 것이 μ•„λ‹ˆλΌ λ§Œλ“€μ–΄μ§„ μ½”λ“œμ— μ˜λ„λ₯Ό 집어 λ„£μœΌλ €λŠ” μžμ„Έλ₯Ό κ²½ν—˜ν–ˆκΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

이런 λ§ˆμΈλ“œ 셋이 μ™œ 잘λͺ»λ˜μ—ˆκ³ , 클린 μ½”λ“œλ₯Ό 지ν–₯ν•΄μ•Ό ν•˜λŠ” μ΄μœ κ°€ λ¬΄μ—‡μΌκΉŒμš”?

 

Technical Debt

좜처 : Clean Code sheet

μ‹€μ œ ν”„λ‘œμ νŠΈμ—μ„œ λ°œμƒν•˜λŠ” μˆ˜μΉ˜μ™€ 이상적인 수치의 κ·Έλž˜ν”„λŠ” μœ„μ™€ κ°™μŠ΅λ‹ˆλ‹€.

개발 μ΄ˆκΈ°μ—λŠ” ν΄λ¦°μ½”λ“œλ‘œ κ°œλ°œν•˜κΈ° λ³΄λ‹€λŠ” μ’€ 더 λΉ λ₯΄κ³  μ‰¬μš΄ 방법을 μ„ νƒν•˜λ©΄μ„œ, μœ μ§€λ³΄μˆ˜κ°€ μ–΄λ €μ›Œ 지고, κ²°κ΅­ μœ μ§€λ³΄μˆ˜μ˜ μ»€λ‹€λž€ 걸림돌이 되겠죠.

이것이 Technical Debtμž…λ‹ˆλ‹€. 뜻 κ·ΈλŒ€λ‘œ 기술적 뢀채, μ–Έμ  κ°€λŠ” 해결해야될 λ¬Έμ œλΌλŠ”κ±°μ£ .

πŸ˜€ν΄λ¦° μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” 방법

  1. KISS 원칙 (Keep It Simple, Stupid): μ½”λ“œλ₯Ό κ°€λŠ₯ν•œ ν•œ λ‹¨μˆœν•˜κ²Œ μž‘μ„±ν•΄μ•Ό ν•©λ‹ˆλ‹€. λ³΅μž‘μ„±μ„ μ΅œμ†Œν™”ν•˜κ³  λΆˆν•„μš”ν•œ κΈ°λŠ₯μ΄λ‚˜ 섀계λ₯Ό ν”Όν•˜λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€.
  2. DRY 원칙 (Don't Repeat Yourself): 쀑볡을 μ΅œμ†Œν™”ν•΄μ•Ό ν•©λ‹ˆλ‹€. 같은 μ½”λ“œλ₯Ό μ—¬λŸ¬ κ³³μ—μ„œ λ°˜λ³΅ν•΄μ„œ μž‘μ„±ν•˜λŠ” 것을 ν”Όν•˜κ³ , μ€‘λ³΅λ˜λŠ” λ‘œμ§μ€ ν•¨μˆ˜λ‚˜ 클래슀 λ“±μœΌλ‘œ μΆ”μƒν™”ν•˜μ—¬ μž¬μ‚¬μš©μ„±μ„ λ†’μ—¬μ•Ό ν•©λ‹ˆλ‹€.
  3. YAGNI 원칙 (You Aren't Gonna Need It): λΆˆν•„μš”ν•œ κΈ°λŠ₯μ΄λ‚˜ μ½”λ“œλ₯Ό μž‘μ„±ν•˜μ§€ μ•Šμ•„μ•Ό ν•©λ‹ˆλ‹€. ν˜„μž¬ ν•„μš”ν•œ μš”κ΅¬μ‚¬ν•­μ— μ§‘μ€‘ν•˜κ³ , λ―Έλž˜μ— ν•„μš”ν• μ§€λ„ λͺ¨λ₯Ό κΈ°λŠ₯을 미리 κ΅¬ν˜„ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  4. SOLID 원칙: SOLIDλŠ” λ‹€μ„― 가지 객체 지ν–₯ 섀계 μ›μΉ™μ˜ μ•žκΈ€μžλ₯Ό λ”΄ κ²ƒμœΌλ‘œ, μ†Œν”„νŠΈμ›¨μ–΄ μ„€κ³„μ˜ μœ μ—°μ„±κ³Ό ν™•μž₯성을 λ†’μ΄λŠ”λ° 도움이 λ©λ‹ˆλ‹€.
    • 단일 μ±…μž„ 원칙(Single Responsibility Principle): ν•˜λ‚˜μ˜ ν΄λž˜μŠ€λŠ” ν•˜λ‚˜μ˜ μ±…μž„λ§Œ κ°€μ Έμ•Ό ν•©λ‹ˆλ‹€.
    • 개방-폐쇄 원칙(Open/Closed Principle): 기쑴의 μ½”λ“œλ₯Ό λ³€κ²½ν•˜μ§€ μ•ŠμœΌλ©΄μ„œ κΈ°λŠ₯을 ν™•μž₯ν•  수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.
    • λ¦¬μŠ€μ½”ν”„ μΉ˜ν™˜ 원칙(Liskov Substitution Principle): ν•˜μœ„ ν΄λž˜μŠ€λŠ” μƒμœ„ 클래슀의 κΈ°λŠ₯을 μ™„μ „νžˆ λŒ€μ²΄ν•  수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.
    • μΈν„°νŽ˜μ΄μŠ€ 뢄리 원칙(Interface Segregation Principle): ν΄λΌμ΄μ–ΈνŠΈλŠ” μžμ‹ μ΄ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” μΈν„°νŽ˜μ΄μŠ€μ— μ˜μ‘΄ν•˜μ§€ μ•Šμ•„μ•Ό ν•©λ‹ˆλ‹€.
    • 의쑴 μ—­μ „ 원칙(Dependency Inversion Principle): 의쑴 관계λ₯Ό λ§Œλ“€ λ•Œ κ³ μˆ˜μ€€ λͺ¨λ“ˆμ€ μ €μˆ˜μ€€ λͺ¨λ“ˆμ˜ κ΅¬ν˜„μ— μ˜μ‘΄ν•˜μ§€ μ•Šλ„λ‘ ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  5. 가독성과 λͺ…ν™•μ„±: λ³€μˆ˜, ν•¨μˆ˜, 클래슀 λ“±μ˜ 이름은 λͺ…ν™•ν•˜κ³  의미 μžˆλŠ” 이름을 μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€. 듀여쓰기와 곡백을 μ˜¬λ°”λ₯΄κ²Œ μ‚¬μš©ν•˜μ—¬ μ½”λ“œμ˜ ꡬ쑰λ₯Ό λͺ…ν™•νžˆ ν‘œν˜„ν•΄μ•Ό ν•©λ‹ˆλ‹€. λ˜ν•œ 주석을 μ μ ˆν•˜κ²Œ ν™œμš©ν•˜μ—¬ μ½”λ“œμ˜ μ˜λ„λ₯Ό μ„€λͺ…ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  6. μž‘μ€ ν•¨μˆ˜μ™€ λͺ¨λ“ˆ: ν•¨μˆ˜λŠ” μž‘κ³  ν•œ 가지 일만 μˆ˜ν–‰ν•˜λ„λ‘ μž‘μ„±ν•˜κ³ , λͺ¨λ“ˆμ€ κ΄€λ ¨λœ κΈ°λŠ₯을 λ¬Άμ–΄μ„œ 응집성을 λ†’μ—¬μ•Ό ν•©λ‹ˆλ‹€.
  7. ν…ŒμŠ€νŠΈ 지ν–₯: μ½”λ“œλ₯Ό μž‘μ„±ν•  λ•Œ λ‹¨μœ„ ν…ŒμŠ€νŠΈλ₯Ό κ³ λ €ν•˜μ—¬ μ„€κ³„ν•˜κ³ , ν…ŒμŠ€νŠΈ κ°€λŠ₯ν•œ μ½”λ“œλ₯Ό μž‘μ„±ν•΄μ•Ό ν•©λ‹ˆλ‹€. ν…ŒμŠ€νŠΈκ°€ μ‰¬μš΄ μ½”λ“œλŠ” 버그λ₯Ό 쀄이고 μ½”λ“œμ˜ 신뒰성을 λ†’μž…λ‹ˆλ‹€.

좜처

λ‘œλ²„νŠΈ C. λ§ˆν‹΄(Robert C. Martin)의 μ±… "Clean Code: A Handbook of Agile Software Craftsmanship”

 

ν΄λ¦°μ½”λ“œλž€ 무엇인가? | μΈμ‚¬μ΄νŠΈλ¦¬ν¬νŠΈ | μ‚Όμ„±SDS

개발자라면 λˆ„κ΅¬λ‚˜ ν•œ λ²ˆμ―€μ€ κ³ λ―Όν•΄ 봀을 λ§Œν•œ ν΄λ¦°μ½”λ“œ! ν΄λ¦°μ½”λ“œλž€ 무엇이고, ν΄λ¦°μ½”λ“œλ₯Ό μž‘μ„±ν•˜κΈ° μœ„ν•œ 원칙듀은 μ–΄λ–€ 것듀이 μžˆλŠ”μ§€ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

www.samsungsds.com