# [[Code Smell (μ½”λ“œ 슀멜)]] ## πŸ“Œ Brief Summary μΌ„νŠΈ 벑(Kent Beck)이 κ³ μ•ˆν•˜κ³  λ§ˆν‹΄ 파울러(Martin Fowler)κ°€ λŒ€μ€‘ν™”ν•œ 'μ½”λ“œ 슀멜'은 μ†Œν”„νŠΈμ›¨μ–΄ μ‹œμŠ€ν…œ 내뢀에 더 κΉŠμ€ 섀계적 λ¬Έμ œκ°€ μžˆμŒμ„ μ•”μ‹œν•˜λŠ” ν‘œλ©΄μ μΈ 징후이닀 [1, 2]. μ΄λŠ” κ°œλ°œμžκ°€ μ§κ΄€μ μœΌλ‘œ 감지할 수 μžˆλŠ” ꡬ쑰적 κ²°ν•¨μ˜ μ§€ν‘œλ‘œ, μ‹œμŠ€ν…œμ˜ μ½”λ“œκ°€ λΆ€νŒ¨ν•˜κ±°λ‚˜ 기술 뢀채가 μΆ•μ λ˜κ³  μžˆμŒμ„ λ‚˜νƒ€λ‚Έλ‹€ [1-3]. κ·ΈλŸ¬λ‚˜ 슀멜 μžμ²΄κ°€ 항상 λ§Ήλͺ©μ μΈ 였λ₯˜λ‚˜ 버그λ₯Ό μ˜λ―Έν•˜λŠ” 것은 μ•„λ‹ˆλ©°, λ¦¬νŒ©ν† λ§μ„ 톡해 μ½”λ“œμ˜ μœ μ§€λ³΄μˆ˜μ„±, 가독성, 그리고 μœ μ—°μ„±μ„ 높일 수 μžˆλŠ” ν›Œλ₯­ν•œ κ°œμ„  기회λ₯Ό μ œκ³΅ν•œλ‹€ [4, 5]. ## πŸ“– Core Content * **μ½”λ“œ 슀멜의 μ •μ˜μ™€ 의의:** μ½”λ“œ μŠ€λ©œμ€ μ½”λ“œκ°€ μ–΄λ–»κ²Œ 썩어가고 μžˆλŠ”μ§€λ₯Ό λ³΄μ—¬μ£ΌλŠ” μ‹ ν˜Έλ‘œ, 이λ₯Ό λ°©μΉ˜ν•˜λ©΄ μ½”λ“œ μœ μ§€λ³΄μˆ˜κ°€ μ–΄λ €μ›Œμ§€κ³  기술 뢀채가 μŒ“μ΄κ²Œ λœλ‹€ [3, 6]. 반면, μ½”λ“œ μŠ€λ©œμ„ 쑰기에 μΈμ§€ν•˜κ³  ν•΄κ²°ν•˜λ©΄ 기술 λΆ€μ±„μ˜ 좕적을 μ˜ˆλ°©ν•  수 있으며, νŒ€ λ‚΄μ—μ„œ μŠ€λ©œμ— λŒ€ν•œ κ³΅ν†΅μ˜ μ–΄νœ˜λ₯Ό κ³΅μœ ν•¨μœΌλ‘œμ¨ μ½”λ“œ 리뷰와 ν˜‘μ—…μ˜ μ§ˆμ„ 크게 높일 수 μžˆλ‹€ [5, 7]. * **μ½”λ“œ 슀멜의 μ£Όμš” λΆ„λ₯˜ (Taxonomy):** * **λΉ„λŒ€ν™” (Bloaters):** κΈ΄ ν•¨μˆ˜, κ±°λŒ€ 클래슀, κΈ°λ³Έ νƒ€μž… μ§‘μ°©, 데이터 λ­‰μΉ˜, κΈ΄ λ§€κ°œλ³€μˆ˜ λͺ©λ‘ 등을 ν¬ν•¨ν•œλ‹€ [2, 8]. μ½”λ“œκ°€ λ„ˆλ¬΄ κ±°λŒ€ν•΄μ Έμ„œ ν•œλˆˆμ— νŒŒμ•…ν•˜κΈ° μ–΄λ ΅κ³  μˆ˜μ • μ‹œ λΆ€μˆ˜ νš¨κ³Όκ°€ λ°œμƒν•  ν™•λ₯ μ΄ 높은 μƒνƒœμ΄λ‹€ [2]. * **객체지ν–₯ λ‚¨μš© (OO Abusers):** λ°˜λ³΅λ˜λŠ” switch λ¬Έ, κ±°λΆ€λœ μœ μ‚°, μž„μ‹œ ν•„λ“œ, μΈν„°νŽ˜μ΄μŠ€κ°€ λ‹€λ₯Έ λŒ€μ•ˆ 클래슀 λ“± 객체지ν–₯의 이점(λ‹€ν˜•μ„±, 상속 λ“±)을 μ œλŒ€λ‘œ 살리지 λͺ»ν•˜κ³  μ ˆμ°¨μ§€ν–₯적으둜 κ΅³μ–΄μ§„ μƒνƒœλ₯Ό λ§ν•œλ‹€ [2, 8]. * **λ³€κ²½ λ°©ν•΄ (Change Preventers):** 뒀엉킨 λ³€κ²½, 산탄총 수술, 평행 상속 계측 등이 μ†ν•œλ‹€ [2, 9]. ν•˜λ‚˜μ˜ μš”κ΅¬μ‚¬ν•­μ„ λ³€κ²½ν•˜κΈ° μœ„ν•΄ μ‹œμŠ€ν…œμ˜ μ—¬λŸ¬ 곳을 λ™μ‹œμ— 고쳐야 ν•˜λŠ” λ“± ꡬ쑰적 경직성을 μ΄ˆλž˜ν•œλ‹€ [2]. * **λΆˆν•„μš” μš”μ†Œ (Dispensables):** 쀑볡 μ½”λ“œ, λΆˆν•„μš”ν•œ 주석, 게으λ₯Έ 클래슀, 데이터 클래슀, 죽은 μ½”λ“œ λ“± 가독성을 ν•΄μΉ˜κ³  관리 포인트만 쓸데없이 λŠ˜λ¦¬λŠ” λ¬΄μ˜λ―Έν•œ μš”μ†Œλ“€μ΄λ‹€ [2, 8]. * **κ²°ν•©μž (Couplers):** κΈ°λŠ₯ μš•μ‹¬, λΆ€μ μ ˆν•œ μΉœλ°€ν•¨, λ©”μ‹œμ§€ 체인, 미듀맨 등이 ν¬ν•¨λ˜λ©° 객체 κ°„μ˜ μ˜μ‘΄μ„±μ΄ μ§€λ‚˜μΉ˜κ²Œ κ°•ν•΄ 독립적인 변경이 λΆˆκ°€λŠ₯ν•΄μ§„ μƒνƒœμ΄λ‹€ [2, 9]. * **κ°€μž₯ 치λͺ…적인 슀멜과 λŒ€μ²˜λ²•:** '쀑볡 μ½”λ“œ(Duplicate Code)'λŠ” 둜직 λ³€κ²½ μ‹œ λͺ¨λ“  쀑볡 지점을 μ°Ύμ•„ μˆ˜μ •ν•΄μ•Ό ν•˜λ―€λ‘œ κ°€μž₯ 치λͺ…적인 슀멜둜 κ°„μ£Όλœλ‹€ [10, 11]. λ˜ν•œ, 'κΈ΄ ν•¨μˆ˜(Long Method)'λŠ” 좔상화가 λ’€μ„žμ—¬ 인지 λΆ€ν•˜λ₯Ό λ†’μ΄λŠ” 주범이닀 [11]. λ§ˆν‹΄ νŒŒμšΈλŸ¬λŠ” ν•¨μˆ˜ 본문에 주석을 달고 싢은 유혹이 λ“€ λ•Œκ°€ λ°”λ‘œ κ·Έ μ½”λ“œλ₯Ό λ³„λ„μ˜ ν•¨μˆ˜λ‘œ μΆ”μΆœν•΄μ•Ό ν•  μ‹œμ μ΄λΌκ³  μ‘°μ–Έν•œλ‹€ [11, 12]. * **ν…ŒμŠ€νŠΈ μ½”λ“œμ˜ 슀멜:** μŠ€λ©œμ€ ν”„λ‘œλ•μ…˜ μ½”λ“œλΏλ§Œ μ•„λ‹ˆλΌ ν…ŒμŠ€νŠΈ μ½”λ“œμ—μ„œλ„ λ°œμƒν•œλ‹€. μ›μΉ˜ μ•ŠλŠ” 쀑볡, μ„€λͺ…이 μ—†λŠ” 단언(assertion), μžμ› κ°„μ„­ 등이 ν…ŒμŠ€νŠΈ μ½”λ“œμ˜ μŠ€λ©œμ— ν•΄λ‹Ήν•˜λ©°, 이 μ—­μ‹œ ν…ŒμŠ€νŠΈ μ „μš© λ¦¬νŒ©ν† λ§μ„ 톡해 κ°œμ„ ν•΄μ•Ό ν•œλ‹€ [13]. ## βš–οΈ Trade-offs & Caveats * **μ§€ν‘œμΌ 뿐, μ ˆλŒ€μ  였λ₯˜λŠ” μ•„λ‹˜:** μŠ€λ©œμ€ λ‚΄λΆ€ 문제의 'μ§€ν‘œ'일 뿐, κ·Έ μžμ²΄κ°€ 무쑰건 λ‚˜μœ 것은 μ•„λ‹ˆλ‹€ [4]. 예λ₯Ό λ“€μ–΄, μ–΄λ–€ κΈ΄ ν•¨μˆ˜λŠ” 였히렀 λΆ„λ¦¬ν•˜μ§€ μ•ŠλŠ” 것이 더 타당할 수 μžˆλ‹€ [4]. 슀멜이 보인닀고 ν•΄μ„œ κΈ°κ³„μ μœΌλ‘œ 무쑰건 μˆ˜μ •ν•˜λŠ” 것은 λΆˆν•„μš”ν•œ μ˜€λ²„μ—”μ§€λ‹ˆμ–΄λ§μ„ μ΄ˆλž˜ν•  수 μžˆλ‹€ [4]. * **λͺ©μ  μ—†λŠ” λ¦¬νŒ©ν† λ§μ˜ μœ„ν—˜μ„±:** λͺ…ν™•ν•œ κ³„νšμ΄λ‚˜ λΉ„μ¦ˆλ‹ˆμŠ€ λͺ©μ  없이 논리 ꡬ쑰λ₯Ό μž¬μ‘°μ •ν•˜λ €λ‹€ 보면 μˆ˜μ • λ²”μœ„κ°€ ν†΅μ œν•  수 없이 μ»€μ§€λŠ” 'λ²”μœ„ λ³€μ§ˆ(Scope Creep)'에 빠질 수 μžˆλ‹€ [14]. μ•„λ¦„λ‹€μš΄ μ½”λ“œλ₯Ό λ§Œλ“œλŠ” 것 자체λ₯Ό λͺ©μ μœΌλ‘œ μ‚Όμ§€ 말고, κΈ°λŠ₯ 변경을 더 μ‰½κ²Œ λ§Œλ“€κ±°λ‚˜ 경제적 이득이 λͺ…ν™•ν•  λ•Œ 집쀑해야 ν•œλ‹€ [15, 16]. * **λ ˆκ±°μ‹œ μ½”λ“œμ—μ„œμ˜ 치λͺ…적 μœ„ν—˜:** λ‹¨μœ„ ν…ŒμŠ€νŠΈ λ“± μ•ˆμ „λ§μ΄ κ²°μ—¬λœ λ ˆκ±°μ‹œ μ‹œμŠ€ν…œμ—μ„œ λˆˆμ— λ³΄μ΄λŠ” μ½”λ“œ μŠ€λ©œμ„ 고치렀 μ‹œλ„ν•˜λŠ” 것은 예기치 μ•Šμ€ νšŒκ·€ 버그(Regression Bug)λ₯Ό λ°œμƒμ‹œν‚¬ μœ„ν—˜μ΄ 맀우 λ†’λ‹€ [17, 18]. ## πŸ”— Knowledge Connections ### Related Concepts #### [관계 μœ ν˜• A: 문제 식별 및 관리 (Problem Identification)] - [[Technical Debt (기술 뢀채)]] - μ—°κ²° 이유: μ½”λ“œ μŠ€λ©œμ„ λ°©μΉ˜ν•˜κ³  지름길을 νƒν•˜λ©΄ μžμ—°μŠ€λŸ½κ²Œ 기술 λΆ€μ±„λ‘œ μΆ•μ λœλ‹€ [19]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: μ½”λ“œ μŠ€λ©œμ„ μ²­μ†Œν•˜λŠ” λ¦¬νŒ©ν† λ§μ΄ μ–΄λ–»κ²Œ μž₯기적인 개발 λΉ„μš©(기술 뢀채)을 쀄이고 μ†Œν”„νŠΈμ›¨μ–΄μ˜ κ²½μ œμ„±μ„ λ†’μ΄λŠ”μ§€ 이해할 수 μžˆλ‹€ [16, 19]. - [[Rule of Three (3의 법칙)]] - μ—°κ²° 이유: '쀑볡 μ½”λ“œ(Duplicate Code)'λΌλŠ” λŒ€ν‘œμ μΈ μ½”λ“œ μŠ€λ©œμ„ μ–Έμ œ λ¦¬νŒ©ν† λ§ν•΄μ•Ό ν• μ§€ νŒλ‹¨ν•˜λŠ” μ‹€μš©μ  기쀀을 μ œκ³΅ν•œλ‹€ [10]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: λͺ¨λ“  쀑볡(슀멜)을 μ¦‰μ‹œ κ³ μΉ˜λŠ” λŒ€μ‹ , λ™μΌν•œ μ½”λ“œκ°€ μ„Έ 번 λ‚˜νƒ€λ‚  λ•Œ 좔상화λ₯Ό μ μš©ν•˜λŠ” 것이 μ„±κΈ‰ν•œ ꡬ쑰화λ₯Ό ν”Όν•˜λŠ” κΈΈμž„μ„ ν•™μŠ΅ν•  수 μžˆλ‹€ [10, 20]. #### [관계 μœ ν˜• B: ν•΄κ²°μ±… 및 검증 (Solutions & Verification)] - [[Refactoring Techniques (λ¦¬νŒ©ν† λ§ 기법)]] - μ—°κ²° 이유: μ‹λ³„λœ νŠΉμ • μ½”λ“œ μŠ€λ©œμ„ ν•΄κ²°ν•˜κΈ° μœ„ν•΄ μ§μ ‘μ μœΌλ‘œ μ μš©ν•˜λŠ” μ²˜λ°©μ „ 역할을 ν•œλ‹€ [21]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: 'κΈ΄ ν•¨μˆ˜'μ—λŠ” 'ν•¨μˆ˜ μΆ”μΆœν•˜κΈ°', '데이터 λ­‰μΉ˜'μ—λŠ” '클래슀 μΆ”μΆœν•˜κΈ°' λ“± 슀멜의 μ’…λ₯˜μ— 따라 μ μš©λ˜λŠ” ꡬ체적인 ꡬ쑰적 λ³€ν™˜ 기법듀을 λ§€ν•‘ν•˜μ—¬ 배울 수 μžˆλ‹€ [12, 22-39]. - [[Automated Testing (μžλ™ν™”λœ ν…ŒμŠ€νŠΈ)]] - μ—°κ²° 이유: μ½”λ“œ μŠ€λ©œμ„ μ œκ±°ν•˜κΈ° μœ„ν•΄ λ‚΄λΆ€ ꡬ쑰λ₯Ό λ³€κ²½ν•  λ•Œ κΈ°λŠ₯이 κΉ¨μ§€μ§€ μ•Šμ•˜μŒμ„ 보μž₯ν•˜λŠ” ν•„μˆ˜ μ•ˆμ „λ§μ΄λ‹€ [17, 18]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: ν…ŒμŠ€νŠΈ μ—†λŠ” μƒνƒœμ—μ„œμ˜ 슀멜 μ œκ±°κ°€ μ™œ μž¬μ•™μœΌλ‘œ μ΄μ–΄μ§ˆ 수 μžˆλŠ”μ§€, 그리고 λ‹¨μœ„ ν…ŒμŠ€νŠΈ ν”ΌλΌλ―Έλ“œκ°€ μ–΄λ–»κ²Œ λ¦¬νŒ©ν† λ§μ„ μ§€νƒ±ν•˜λŠ”μ§€ νŒŒμ•…ν•  수 μžˆλ‹€ [18]. - [[AI-Assisted Refactoring (AI 기반 λ¦¬νŒ©ν† λ§)]] - μ—°κ²° 이유: ν˜„λŒ€ μ†Œν”„νŠΈμ›¨μ–΄ ν™˜κ²½μ—μ„œ LLM(κ±°λŒ€μ–Έμ–΄λͺ¨λΈ) 기반 AIλŠ” λ―Έμ„Έν•œ μ½”λ“œ μŠ€λ©œμ„ λΉ λ₯΄κ²Œ μ‹λ³„ν•˜κ³  λ¦¬νŒ©ν† λ§ λ°©ν–₯을 μ œμ•ˆν•˜λŠ” 역할을 ν•œλ‹€ [40, 41]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: κΈ°μ‘΄ κ°œλ°œμžκ°€ μˆ˜λ™μœΌλ‘œ λ°œκ²¬ν•˜λ˜ μŠ€λ©œμ„ 인곡지λŠ₯이 μ–΄λ–»κ²Œ 효율적으둜 νƒμ§€ν•˜λŠ”μ§€, 그리고 이 κ³Όμ •μ—μ„œ λ°œμƒν•˜λŠ” 검증 λΉ„μš©κ³Ό μƒμ‚°μ„±μ˜ μ—­μ„€(Productivity Paradox) ν•œκ³„λ₯Ό μ§šμ–΄λ³Ό 수 μžˆλ‹€ [41, 42]. ### Deeper Research Questions - ꡬ쑰적 결함(μ½”λ“œ 슀멜)을 μΈμ§€ν–ˆμŒμ—λ„ λΆˆκ΅¬ν•˜κ³ , λΉ„μ¦ˆλ‹ˆμŠ€μ μ΄λ‚˜ 기술적인 이유둜 이λ₯Ό 즉각 λ¦¬νŒ©ν† λ§ν•˜μ§€ μ•Šκ³  μ˜λ„μ μœΌλ‘œ λ‚¨κ²¨λ‘λŠ” 것이 μœ λ¦¬ν•œ ꡬ체적 μ‚¬λ‘€λŠ” 무엇인가? - λŒ€κ·œλͺ¨ λ ˆκ±°μ‹œ μ‹œμŠ€ν…œμ—μ„œ μ—¬λŸ¬ λ²”μ£Όμ˜ μ½”λ“œ 슀멜(예: κ²°ν•©μž vs λΆˆν•„μš” μš”μ†Œ)이 ν˜Όμž¬ν•  λ•Œ, κ°€μž₯ 높은 투자 λŒ€λΉ„ 수읡(ROI)을 λ‹¬μ„±ν•˜κΈ° μœ„ν•΄ μ–΄λ–€ μŠ€λ©œλΆ€ν„° μš°μ„ μˆœμœ„λ₯Ό 두고 μ œκ±°ν•΄μ•Ό ν•˜λŠ”κ°€? - ν…ŒμŠ€νŠΈ μ½”λ“œμ—μ„œ λ°œμƒν•˜λŠ” 슀멜(Test Smells)이 방치될 경우, CI/CD νŒŒμ΄ν”„λΌμΈκ³Ό ν”„λ‘œλ•μ…˜ λ¦¬νŒ©ν† λ§ 과정에 μ–΄λ–€ 뢀정적 연쇄 효과λ₯Ό λ―ΈμΉ˜λŠ”κ°€? - μƒμ„±ν˜• AI와 정적 μ½”λ“œ 뢄석기(Static Code Analyzer)κ°€ μ½”λ“œ μŠ€λ©œμ„ μ‹λ³„ν•˜λŠ” λ°©μ‹μ˜ 근본적인 차이점은 무엇이며, 각각의 ν•œκ³„λŠ” 무엇인가? - 개발 쑰직 λ‚΄μ—μ„œ μ£Όλ‹ˆμ–΄ κ°œλ°œμžλ“€μ΄ 'μ½”λ“œ 슀멜'에 λŒ€ν•œ 민감도λ₯Ό 높이고, μ½”λ“œ 리뷰 κ³Όμ •μ—μ„œ κ³΅ν†΅λœ μ–΄νœ˜λ‘œ μ†Œν†΅ν•˜λ„λ‘ μœ λ„ν•˜λŠ” 효과적인 ν›ˆλ ¨ ν”„λ ˆμž„μ›Œν¬λŠ” 무엇인가? ### Practical Application Contexts - **Implementation:** μƒˆλ‘œμš΄ κΈ°λŠ₯을 κ°œλ°œν•˜κ±°λ‚˜ μ½”λ“œ 리뷰λ₯Ό μ§„ν–‰ν•  λ•Œ, 'κΈ°λŠ₯ μš•μ‹¬'μ΄λ‚˜ '데이터 λ­‰μΉ˜' 같은 μ½”λ“œ 슀멜 μ§•ν›„λ₯Ό 쑰기에 ν¬μ°©ν•˜κ³  즉각적인 'ν•¨μˆ˜ μΆ”μΆœ'μ΄λ‚˜ '클래슀 뢄리'λ₯Ό μˆ˜ν–‰ν•œλ‹€ [7, 43]. - **System Design:** μ•„ν‚€ν…μ²˜λ₯Ό μ„€κ³„ν•˜κ±°λ‚˜ κ²€ν† ν•  λ•Œ '산탄총 수술'μ΄λ‚˜ '뒀엉킨 λ³€κ²½'κ³Ό 같은 슀멜 μ§€ν‘œλ₯Ό ν™œμš©ν•˜μ—¬ 단일 μ±…μž„ 원칙(SRP) μœ„λ°˜ μ—¬λΆ€λ₯Ό ν™•μΈν•˜κ³ , λͺ¨λ“ˆ κ°„ 응집도와 결합도λ₯Ό μ΅œμ ν™”ν•œλ‹€ [2]. - **Operation / Maintenance:** 기술 뢀채가 μ‹¬ν•œ λ ˆκ±°μ‹œ μ½”λ“œλ₯Ό μœ μ§€λ³΄μˆ˜ν•  λ•Œ, μ½”λ“œ μŠ€λ©œμ„ μ‹λ³„ν•˜κ³  접점(Seams)을 λ§Œλ“€μ–΄ ν…ŒμŠ€νŠΈλ₯Ό λΆ€μ°©ν•œ λ’€, κ΅­μ†Œμ μœΌλ‘œ λƒ„μƒˆλ‚˜λŠ” λΆ€μœ„λ₯Ό μ²­μ†Œν•΄ λ‚˜κ°€λŠ” 점진적 κ°œμ„  μž‘μ—…μ— μ μš©ν•œλ‹€ [44-46]. - **Learning Path:** 개발 νŒ€μ˜ μ˜¨λ³΄λ”© κ³Όμ •μ—μ„œ μ‹ μž… κ°œλ°œμžκ°€ 쒋은 섀계와 λ‚˜μœ 섀계λ₯Ό ꡬ뢄할 수 μžˆλ„λ‘ νŠΉμ • μ½”λ“œ μŠ€λ©œμ„ '이주의 슀멜'둜 μ„ μ •ν•΄ 슀슀둜 문제λ₯Ό νƒμ§€ν•˜κ³  κ°œμ„ ν•΄ 보도둝 ν•™μŠ΅μ‹œν‚¨λ‹€ [7]. - **My Project Relevance:** ν˜„μž¬ μ§„ν–‰ 쀑인 개발 ν”„λ‘œμ νŠΈ λ‚΄μ—μ„œ, λ™μΌν•œ 버그가 반볡 λ°œμƒν•˜κ±°λ‚˜ κΈ°λŠ₯ ν™•μž₯이 μ–΄λ €μš΄ λͺ¨λ“ˆμ˜ 슀멜(예: κ±°λŒ€ 클래슀, κΈ΄ λ§€κ°œλ³€μˆ˜ λͺ©λ‘)을 λΆ„μ„ν•˜κ³  이λ₯Ό μ μ ˆν•œ λ¦¬νŒ©ν† λ§ 기법에 λ§€ν•‘ν•˜μ—¬ μ½”λ“œ ꡬ쑰λ₯Ό μ²΄κ³„μ μœΌλ‘œ μ •λˆν•˜λŠ” 데 ν™œμš©ν•œλ‹€. ### Adjacent Topics - [[Static Code Analysis (정적 μ½”λ“œ 뢄석기)]] - ν™•μž₯ λ°©ν–₯: μ†ŒμŠ€ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜μ§€ μ•Šκ³  잠재적 κ²°ν•¨μ΄λ‚˜ μ½”λ“œ 슀멜(예: PMD, Codacy μ‚¬μš©)을 μžλ™μœΌλ‘œ μ°Ύμ•„λ‚΄λŠ” λ„κ΅¬μ˜ ν™œμš© 기법 및 ν•œκ³„λ₯Ό νŒŒμ•…ν•˜λŠ” λ°©ν–₯으둜 ν™•μž₯ [47]. - [[Test-Driven Development (TDD)]] - ν™•μž₯ λ°©ν–₯: Red-Green-Refactor μ‚¬μ΄ν΄μ˜ λ§ˆμ§€λ§‰ 단계인 Refactor κ³Όμ •μ—μ„œ, κ΅¬ν˜„λœ μ½”λ“œ λ‚΄μ˜ μŠ€λ©œμ„ κ°μ§€ν•˜κ³  μ§€μ†μ μœΌλ‘œ 섀계λ₯Ό κ°œμ„ ν•˜μ—¬ μ½”λ“œλ² μ΄μŠ€λ₯Ό κ±΄κ°•ν•˜κ²Œ μœ μ§€ν•˜λŠ” 방법둠 ν•™μŠ΅μœΌλ‘œ μ—°κ²° [48, 49]. --- *Last updated: 2026-05-03*