Amenable
Amenable's Blog
Amenable
  • λΆ„λ₯˜ 전체보기 (189)
    • πŸ“‚ JAVA (87)
      • μ΄νŽ™ν‹°λΈŒ μžλ°” (65)
      • μ£Όμš” κ°œλ… (22)
    • πŸ“‚ 개발 μ„œμ  (22)
      • μ‹€μš©μ£Όμ˜ ν”„λ‘œκ·Έλž˜λ¨Έ (1)
      • 객체지ν–₯의 사싀과 μ˜€ν•΄ (2)
      • 클린 μ½”λ“œ (8)
      • ν•¨κ»˜ 자라기 (1)
      • 그림으둜 λ°°μš°λŠ” HTTP&Network Basic (10)
    • πŸ“‚ λ°μ΄ν„°λ² μ΄μŠ€ (8)
      • κ°œλ… (8)
      • λ¬Έμ œν’€μ΄ (0)
    • πŸ“‚ λ„€νŠΈμ›Œν¬ (14)
      • κ°œλ… (6)
      • 성곡과 μ‹€νŒ¨λ₯Ό κ²°μ •ν•˜λŠ” 1%의 λ„€νŠΈμ›Œν¬ 원리 (8)
    • πŸ“‚ μŠ€ν”„λ§ (13)
      • κΈ°λ³Έ κ°œλ… (13)
    • πŸ“‚ WEB (5)
    • πŸ“‚ 자료ꡬ쑰 (12)
      • κ°œλ… (2)
      • μ •λ ¬ (8)
      • 트리 (2)
    • πŸ“‚ μ•Œκ³ λ¦¬μ¦˜ (10)
      • μ΅œμ†Œμ‹ μž₯트리 (2)
      • μ΅œλ‹¨ 경둜 (2)
      • λ¬Έμžμ—΄ (2)
      • ETC (4)
    • πŸ“‚ μ•Œκ³ λ¦¬μ¦˜_λ¬Έμ œν’€μ΄ (4)
      • BOJ_λ°±μ€€ (4)
    • πŸ“‚ ν”„λ‘œκ·Έλž˜λ° (3)
    • πŸ“‚ DevOps (2)
      • 배포 (2)
    • πŸ“‚ ν›„κΈ° (8)
      • μš°μ•„ν•œ ν…Œν¬μ½”μŠ€(ν”„λ¦¬μ½”μŠ€) (4)
      • 2023λ…„ (3)
      • 2024λ…„ (1)
    • πŸ“‚ 회고 (1)
      • 2023λ…„ (1)

λΈ”λ‘œκ·Έ 메뉴

  • πŸš€ GitHub

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
Amenable

Amenable's Blog

클린 μ½”λ“œ(Clean Code) - 13μž₯
πŸ“‚ 개발 μ„œμ /클린 μ½”λ“œ

클린 μ½”λ“œ(Clean Code) - 13μž₯

2023. 1. 12. 22:52

13μž₯. λ™μ‹œμ„± 🚦

  λ™μ‹œμ„±μ€ κ²°ν•©(coupling)을 μ—†μ• λŠ” μ „λž΅μ΄λ‹€. 즉, 무엇과 μ–Έμ œλ₯Ό λΆ„λ¦¬ν•˜λŠ” μ „λž΅μ΄λ‹€.

1. λ™μ‹œμ„±κ³Ό κ΄€λ ¨λœ 일반적인 λ―Έμ‹ κ³Ό μ˜€ν•΄ 🚧

  • λ™μ‹œμ„±μ€ 항상 μ„±λŠ₯을 λ†’μ—¬μ€€λ‹€.
      λ™μ‹œμ„±μ€ λ•Œλ‘œ μ„±λŠ₯을 λ†’μ—¬μ€€λ‹€. λŒ€κΈ° μ‹œκ°„μ΄ μ•„μ£Ό κΈΈμ–΄ μ—¬λŸ¬ μŠ€λ ˆλ“œκ°€ ν”„λ‘œμ„Έμ„œλ₯Ό κ³΅μœ ν•  수 μžˆκ±°λ‚˜, μ—¬λŸ¬ ν”„λ‘œμ„Έμ„œκ°€ λ™μ‹œμ— μ²˜λ¦¬ν•  독립적인 계산이 μΆ©λΆ„νžˆ λ§Žμ€ κ²½μš°λ©”λ‚œ μ„±λŠ₯이 λ†’μ•„μ§„λ‹€. μ–΄λŠ μͺ½λ„ μΌμƒμ μœΌλ‘œ λ°œμƒν•˜λŠ” 상황은 μ•„λ‹ˆλ‹€.
  • λ™μ‹œμ„±μ€ κ΅¬ν˜„ν•΄λ„ μ„€κ³„λŠ” λ³€ν•˜μ§€ μ•ŠλŠ”λ‹€. 
      λ‹¨μΌ μŠ€λ ˆλ“œ μ‹œμŠ€ν…œκ³Ό 닀쀑 μŠ€λ ˆλ“œ μ‹œμŠ€ν…œμ€ 섀계가 νŒμ΄ν•˜κ²Œ λ‹€λ₯΄λ‹€. 일반적으둜 무엇과 μ–Έμ œλ₯Ό λΆ„λ¦¬ν•˜λ©΄ μ‹œμŠ€ν…œ ꡬ쑰가 크게 달리진닀.
  • μ›Ή λ˜λŠ” EJB μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‚¬μš©ν•˜λ©΄ λ™μ‹œμ„±μ„ 이해할 ν•„μš”κ°€ μ—†λ‹€.
      μ‹€μ œλ‘œλŠ” μ»¨ν…Œμ΄λ„ˆκ°€ μ–΄λ–»κ²Œ λ™μž‘ν•˜λŠ”μ§€, μ–΄λ–»κ²Œ λ™μ‹œ μˆ˜μ •, λ°λ“œλ½ λ“±κ³Ό 같은 문제λ₯Ό ν”Όν•  수 μžˆλŠ”μ§€λ₯Ό μ•Œμ•„μ•Όλ§Œ ν•œλ‹€.

 

2. λ™μ‹œμ„±κ³Ό κ΄€λ ¨λœ νƒ€λ‹Ήν•œ λͺ‡ κ°€μ§€ 생각 🎒

  • λ™μ‹œμ„±μ€ λ‹€μ†Œ λΆ€ν•˜λ₯Ό μœ λ°œν•œλ‹€. μ„±λŠ₯ μΈ‘λ©΄μ—μ„œ λΆ€ν•˜κ°€ 걸리면, μ½”λ“œλ„ 더 μ§œμ•Όν•œλ‹€.
  • λ™μ‹œμ„±μ€ λ³΅μž‘ν•˜λ‹€. κ°„λ‹¨ν•œ λ¬Έμ œλΌλ„ λ™μ‹œμ„±μ€ λ³΅μž‘ν•˜λ‹€.
  • 일반적으둜 λ™μ‹œμ„± λ²„κ·ΈλŠ” μž¬ν˜„ν•˜κΈ° μ–΄λ ΅λ‹€. κ·Έλž˜μ„œ μ§„μ§œ κ²°ν•¨μœΌλ‘œ κ°„μ£Όλ˜μ§€ μ•Šκ³  μΌνšŒμ„± 문제둜 여겨 λ¬΄μ‹œν•˜κΈ° 쉽닀.
  • λ™μ‹œμ„±μ„ κ΅¬ν˜„ν•˜λ €λ©΄ ν”νžˆ 근본적인 섀계 μ „λž΅μ„ μž¬κ³ ν•΄μ•Ό ν•œλ‹€.

 

3. λ™μ‹œμ„± 문제λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•œ μ—¬λŸ¬ κ°€μ§€ 원칙과 κΈ°μˆ λ“€ πŸŽͺ

  • λ™μ‹œμ„± μ½”λ“œλŠ” λ‹€λ₯Έ μ½”λ“œμ™€ λΆ„λ¦¬ν•˜λΌ
      잘λͺ» κ΅¬ν˜„ν•œ λ™μ‹œμ„± μ½”λ“œλŠ” λ³„μ˜λ³„ λ°©μ‹μœΌλ‘œ μ‹€νŒ¨ν•œλ‹€. 주변에 μžˆλŠ” λ‹€λ₯Έ μ½”λ“œκ°€ 발λͺ©μ„ μž‘μ§€ μ•Šλ”λΌλ„ λ™μ‹œμ„± ν•˜λ‚˜λ§ŒμœΌλ‘œλ„ μΆ©λΆ„νžˆ μ–΄λ ΅λ‹€.
  • 자료λ₯Ό μΊ‘μŠν™”(encapsulation)ν•˜λΌ. 곡유 자료λ₯Ό μ΅œλŒ€ν•œ 쀄여라
      κ°μ²΄ ν•˜λ‚˜λ₯Ό κ³΅μœ ν•œ ν›„ 동일 ν•„λ“œλ₯Ό μˆ˜μ •ν•˜λ˜ 두 μŠ€λ ˆλ“œκ°€ μ„œλ‘œ κ°„μ„­ν•˜λ©΄ μ˜ˆμƒμΉ˜ λͺ»ν•œ κ²°κ³Όλ₯Ό λ‚΄λ†“λŠ”λ‹€. 이런 문제λ₯Ό ν•΄κ²°ν•˜λŠ” λ°©μ•ˆμœΌλ‘œ 곡유 객체λ₯Ό μ‚¬μš©ν•˜λŠ” μ½”λ“œ λ‚΄ μž„κ³„μ˜μ—­(critical section)을 synchronized ν‚€μ›Œλ“œλ‘œ λ³΄ν˜Έν•˜λΌκ³  ꢌμž₯ν•œλ‹€. 이런 μž„κ³„μ˜μ—­μ˜ 수λ₯Ό μ€„μ΄λŠ” 기술이 μ€‘μš”ν•˜λ‹€.
  • 자료 사본을 μ‚¬μš©ν•˜λΌ
      곡유 자료λ₯Ό 쀄이렀면 μ²˜μŒλΆ€ν„° κ³΅μœ ν•˜μ§€ μ•ŠλŠ” 방법이 제일 μ’‹λ‹€. μ–΄λ–€ κ²½μš°μ—λŠ” 객체λ₯Ό 볡사해 읽기 μ „μš©μœΌλ‘œ μ‚¬μš©ν•˜λŠ” 방법이 κ°€λŠ₯ν•˜λ‹€. μ–΄λ–€ κ²½μš°μ—λŠ” 각 μŠ€λ ˆλ“œκ°€ 객체λ₯Ό 볡사해 μ‚¬μš©ν•œ ν›„ ν•œ μŠ€λ ˆλ“œκ°€ ν•΄λ‹Ή μ‚¬λ³Έμ—μ„œ κ²°κ³Όλ₯Ό κ°€μ Έμ˜€λŠ” 방법도 κ°€λŠ₯ν•˜λ‹€.
  • μŠ€λ ˆλ“œλŠ” κ°€λŠ₯ν•œ λ…λ¦½μ μœΌλ‘œ κ΅¬ν˜„ν•˜λΌ. 
      μžμ‹ λ§Œμ˜ 세상에 μ‘΄μž¬ν•˜λŠ” μŠ€λ ˆλ“œλ₯Ό κ΅¬ν˜„ν•œλ‹€. 즉, λ‹€λ₯Έ μŠ€λ ˆλ“œμ™€ 자료λ₯Ό κ³΅μœ ν•˜μ§€ μ•ŠλŠ”λ‹€. 각 μŠ€λ ˆλ“œλŠ” ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­ ν•˜λ‚˜λ₯Ό μ²˜λ¦¬ν•œλ‹€. λͺ¨λ“  μ •λ³΄λŠ” λΉ„κ³΅μœ  μΆœμ²˜μ—μ„œ κ°€μ Έμ˜€λ©° 둜컬 λ³€μˆ˜μ— μ €μž₯ν•œλ‹€. 그러면 λ‹€λ₯Έ μŠ€λ ˆλ“œμ™€ 동기화할 ν•„μš”κ°€ μ—†μœΌλ―€λ‘œ 각 μŠ€λ ˆλ“œλŠ” 세상에 μžμ‹ λ§Œ μžˆλŠ” 듯이 λŒμ•„κ°ˆ 수 μžˆλ‹€.
  • μ–Έμ–΄κ°€ μ œκ³΅ν•˜λŠ” 클래슀λ₯Ό κ²€ν† ν•˜λΌ
      μŠ€λ ˆλ“œ ν™˜κ²½μ— μ•ˆμ „ν•œ μ»¬λž™μ…˜μ„ μ‚¬μš©ν•œλ‹€. μžλ°”μ—μ„œλŠ” java.util.concurrent, java.util.concurrent.atomic, java.util.concurrent.locksλ₯Ό 읡히자.
  • 곡유 객체 ν•˜λ‚˜μ—λŠ” λ©”μ„œλ“œ ν•˜λ‚˜λ§Œ μ‚¬μš©ν•˜λΌ
      λ™κΈ°ν™”ν•˜λŠ” λ©”μ„œλ“œ 사이에 μ˜μ‘΄μ„±μ΄ μ‘΄μž¬ν•˜λ©΄ λ™μ‹œμ„± μ½”λ“œμ— μ°Ύμ•„λ‚΄κΈ° μ–΄λ €μš΄ 버그가 생긴닀.
  • λ™κΈ°ν™”ν•˜λŠ” 뢀뢄을 μ΅œλŒ€ν•œ μž‘κ²Œ λ§Œλ“€μ–΄λΌ
      μžλ°”μ—μ„œ synchronized ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜λ©΄ 락을 μ„€μ •ν•œλ‹€. 같은 락으둜 감싼 λͺ¨λ“  μ½”λ“œ μ˜μ—­μ€ ν•œ λ²ˆμ— ν•œ μŠ€λ ˆλ“œλ§Œ 싀행이 κ°€λŠ₯ν•˜λ‹€. 락은 μŠ€λ ˆλ“œλ₯Ό μ§€μ—°μ‹œν‚€κ³  λΆ€ν•˜λ₯Ό κ°€μ€‘μ‹œν‚¨λ‹€. κ·ΈλŸ¬λ―€λ‘œ μ—¬κΈ°μ €κΈ°μ„œ synchronized 문을 λ‚¨λ°œν•˜λŠ” μ½”λ“œλŠ” λ°”λžŒμ§ν•˜μ§€ μ•Šλ‹€. 반면, μž„κ³„μ˜μ—­(critical section)은 λ°˜λ“œμ‹œ λ³΄ν˜Έν•΄μ•Ό ν•œλ‹€. λ”°λΌμ„œ, μ½”λ“œλ₯Ό μ§€ λ•ŒλŠ” μž„κ³„ μ˜μ—­μ˜ 수λ₯Ό μ΅œλŒ€ν•œ 쀄여야 ν•œλ‹€. 

 

 

'πŸ“‚ 개발 μ„œμ  > 클린 μ½”λ“œ' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

클린 μ½”λ“œ(Clean Code) - 14μž₯, 15μž₯, 16μž₯, 17μž₯  (0) 2023.01.14
클린 μ½”λ“œ(Clean Code) - 11μž₯, 12μž₯  (0) 2023.01.11
클린 μ½”λ“œ(Clean Code) - 10μž₯  (0) 2023.01.11
클린 μ½”λ“œ(Clean Code) - 8μž₯, 9μž₯  (0) 2023.01.10
클린 μ½”λ“œ(Clean Code) - 7μž₯  (0) 2023.01.10
    'πŸ“‚ 개발 μ„œμ /클린 μ½”λ“œ' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • 클린 μ½”λ“œ(Clean Code) - 14μž₯, 15μž₯, 16μž₯, 17μž₯
    • 클린 μ½”λ“œ(Clean Code) - 11μž₯, 12μž₯
    • 클린 μ½”λ“œ(Clean Code) - 10μž₯
    • 클린 μ½”λ“œ(Clean Code) - 8μž₯, 9μž₯
    Amenable
    Amenable
    CS, μžλ°”, 자료ꡬ쑰, μ•Œκ³ λ¦¬μ¦˜, μŠ€ν”„λ§, μŠ€ν”„λ§ λΆ€νŠΈμ— ν•΄λ‹Ήν•˜λŠ” κ°œλ°œμ— κ΄€ν•œ λ‚΄μš©μ„ κ³΅μœ ν•©λ‹ˆλ‹€.

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”