# [[The Two Hats]] ## πŸ“Œ Brief Summary '두 개의 λͺ¨μž(The Two Hats)'λŠ” μΌ„νŠΈ 벑(Kent Beck)κ³Ό λ§ˆν‹΄ 파울러(Martin Fowler)κ°€ μ œμ•ˆν•œ λ¦¬νŒ©ν† λ§μ˜ 핡심적인 심리적, 절차적 운영 원칙을 λ‚˜νƒ€λ‚΄λŠ” μ€μœ μ΄λ‹€ [1, 2]. 이 원칙은 μ†Œν”„νŠΈμ›¨μ–΄ 개발 μ‹œκ°„μ„ 'κΈ°λŠ₯ μΆ”κ°€(Adding Function)'와 'λ¦¬νŒ©ν† λ§(Refactoring)'μ΄λΌλŠ” 두 κ°€μ§€ λšœλ ·ν•œ ν™œλ™μœΌλ‘œ λͺ…ν™•ν•˜κ²Œ λ‚˜λˆ„μ–΄μ•Ό 함을 κ°•μ‘°ν•œλ‹€ [1, 3]. 즉, κ°œλ°œμžλŠ” μžμ‹ μ΄ ν˜„μž¬ μ–΄λ–€ λͺ©μ μ˜ λͺ¨μžλ₯Ό μ“°κ³  μž‘μ—…μ„ μˆ˜ν–‰ν•˜κ³  μžˆλŠ”μ§€ 항상 μ •ν™•νžˆ μΈμ§€ν•˜μ—¬, 두 κ°€μ§€ ν™œλ™μ„ λ’€μ„žμ§€ μ•Šκ³  λΆ„λ¦¬ν•¨μœΌλ‘œμ¨ μž‘μ—…μ˜ λͺ…확성을 확보해야 ν•œλ‹€ [2, 4]. ## πŸ“– Core Content * **μ›μΉ™μ˜ κ°œλ…κ³Ό λͺ©μ :** '두 개의 λͺ¨μž'λŠ” ν”„λ‘œκ·Έλž˜λ¨Έκ°€ μ½”λ“œ 베이슀λ₯Ό λ‹€λ£° λ•Œ μ·¨ν•΄μ•Ό ν•˜λŠ” 두 κ°€μ§€ μƒλ°˜λœ νƒœλ„λ₯Ό μ„€λͺ…ν•˜λŠ” μ€μœ μ΄λ‹€ [1, 5]. 이 원칙은 κ°œλ°œμžκ°€ ν”„λ‘œκ·Έλž˜λ°μ„ ν•  λ•Œ ν˜„μž¬ μˆ˜ν–‰ 쀑인 μž‘μ—…μ˜ λͺ©μ μ„ λͺ…ν™•νžˆ κ΅¬λΆ„ν•˜μ—¬ 디버깅 νš¨μœ¨μ„±μ„ 높이고 μž‘μ—…μ˜ λͺ…확성을 ν™•λ³΄ν•˜λŠ” 것을 λͺ©ν‘œλ‘œ ν•œλ‹€ [2, 6]. * **κΈ°λŠ₯ μΆ”κ°€(Adding Function) λͺ¨μž:** 'κΈ°λŠ₯ μΆ”κ°€' λͺ¨μžλ₯Ό μ“°κ³  μžˆμ„ λ•ŒλŠ” 였직 μƒˆλ‘œμš΄ λ™μž‘μ„ κ΅¬ν˜„ν•˜κ³  ν…ŒμŠ€νŠΈλ₯Ό ν†΅κ³Όμ‹œν‚€λŠ” λ°μ—λ§Œ 집쀑해야 ν•œλ‹€ [1, 2]. κΈ°μ‘΄ μ½”λ“œμ˜ ꡬ쑰λ₯Ό λ³€κ²½ν•΄μ„œλŠ” μ•ˆ 되며, 단지 μƒˆλ‘œμš΄ κΈ°λŠ₯을 λ”ν•˜λŠ” κ²ƒλ§Œ μˆ˜ν–‰ν•΄μ•Ό ν•œλ‹€ [1, 3]. * **λ¦¬νŒ©ν† λ§(Refactoring) λͺ¨μž:** 'λ¦¬νŒ©ν† λ§' λͺ¨μžλ₯Ό μ“°κ³  μžˆμ„ λ•ŒλŠ” κΈ°μ‘΄ μ½”λ“œμ˜ ꡬ쑰λ₯Ό μž¬κ΅¬μ„±ν•˜κ³  κ°œμ„ ν•˜λŠ” λ°μ—λ§Œ 전념해야 ν•˜λ©°, μƒˆλ‘œμš΄ κΈ°λŠ₯μ΄λ‚˜ ν…ŒμŠ€νŠΈλ₯Ό μ ˆλŒ€λ‘œ μΆ”κ°€ν•΄μ„œλŠ” μ•ˆ λœλ‹€ [1, 3]. 이 λͺ¨μžλ₯Ό 썼을 λ•Œ ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μˆ˜μ •ν•  수 μžˆλŠ” κ²½μš°λŠ” μ˜€λ‘œμ§€ 이전에 λˆ„λ½λœ μΌ€μ΄μŠ€λ₯Ό λ°œκ²¬ν–ˆκ±°λ‚˜, μΈν„°νŽ˜μ΄μŠ€ 변경에 λŒ€μ‘ν•΄μ•Ό ν•  λ•ŒλΏμ΄λ‹€ [3]. * **μœ μ—°ν•œ λͺ¨μž ꡐ체(Swapping Hats):** μ‹€μ œ μ†Œν”„νŠΈμ›¨μ–΄ 개발 κ³Όμ •μ—μ„œ κ°œλ°œμžλŠ” 10λΆ„ μ •λ„μ˜ 짧은 μ‹œκ°„ λ™μ•ˆμ—λ„ μˆ˜μ‹œλ‘œ λͺ¨μžλ₯Ό λ°”κΏ” μ“°κ²Œ λœλ‹€ [7]. 예λ₯Ό λ“€μ–΄, μƒˆλ‘œμš΄ κΈ°λŠ₯을 μΆ”κ°€ν•˜λ €λ‹€ κΈ°μ‘΄ μ½”λ“œλ₯Ό λ‹€λ₯΄κ²Œ κ΅¬μ„±ν•˜λ©΄ 더 μ‰½κ² λ‹€λŠ” 것을 κΉ¨λ‹¬μœΌλ©΄ μž μ‹œ λ¦¬νŒ©ν† λ§ λͺ¨μžλ‘œ λ°”κΏ” μ“°κ³  μ½”λ“œλ₯Ό μ •λΉ„ν•œλ‹€ [7]. ꡬ쑰 κ°œμ„ μ΄ λλ‚˜λ©΄ λ‹€μ‹œ κΈ°λŠ₯ μΆ”κ°€ λͺ¨μžλ₯Ό μ“°κ³  μ½”λ“œλ₯Ό μ™„μ„±ν•œ λ’€, λ§ˆμ§€λ§‰μœΌλ‘œ λ‹€μ‹œ λ¦¬νŒ©ν† λ§ λͺ¨μžλ₯Ό μ“°κ³  μ½”λ“œλ₯Ό κΉ”λ”ν•˜κ²Œ λ‹€λ“¬λŠ” μ‹μœΌλ‘œ μ§„ν–‰λœλ‹€ [7]. μ΄λ•Œ 핡심은 ꡐ체가 λΉˆλ²ˆν•˜λ”λΌλ„ ν˜„μž¬ μ–΄λ–€ λͺ¨μžλ₯Ό μ“°κ³  μžˆλŠ”μ§€ 항상 μžκ°ν•˜λŠ” 것이닀 [4, 7]. ## βš–οΈ Trade-offs & Caveats * **λΆ€μž‘μš©(Side Effect) 및 버그 μˆ˜μ •μ˜ 유혹 ν†΅μ œ:** λ¦¬νŒ©ν† λ§ λͺ¨μžλ₯Ό μ“°κ³  κΈ°μ‘΄ μ½”λ“œλ₯Ό μž¬κ΅¬μ„±ν•˜λ‹€ 보면 μ½”λ“œκ°€ μ œλŒ€λ‘œ λ™μž‘ν•˜μ§€ μ•ŠλŠ” λΆ€λΆ„(버그 λ“±)을 λ°œκ²¬ν•  λ•Œκ°€ μžˆλ‹€ [8]. ν•˜μ§€λ§Œ μ΄λ•Œ 이λ₯Ό μ¦‰μ‹œ μˆ˜μ •ν•˜λ €λŠ” μœ ν˜Ήμ„ κ°•λ ₯히 μ°Έμ•„μ•Ό ν•œλ‹€ [4, 8]. λ¦¬νŒ©ν† λ§μ˜ λͺ©ν‘œλŠ” μ‹œμž‘ν•  λ•Œμ™€ λ˜‘κ°™μ€ κ²°κ³Όλ₯Ό λ„μΆœν•˜λŠ” 것이기 λ•Œλ¬Έμ—, 문제λ₯Ό λ°œκ²¬ν–ˆλ‹€λ©΄ μ½”λ“œ 변경을 λ©ˆμΆ”λŠ” λŒ€μ‹  인덱슀 μΉ΄λ“œ 등에 λ‚˜μ€‘μ— μˆ˜μ •ν•΄μ•Ό ν•  사항(ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€ μΆ”κ°€, κ΄€λ ¨ μ—†λŠ” λ¦¬νŒ©ν† λ§, λ¬Έμ„œ μž‘μ„± λ“±)을 λ©”λͺ¨ν•΄ 두고 ν˜„μž¬ μ§„ν–‰ 쀑인 λ¦¬νŒ©ν† λ§ μž‘μ—…μ—λ§Œ 집쀑해야 ν•œλ‹€ [4, 8]. * **디버깅 νš¨μœ¨μ„± μ €ν•˜ 및 컀밋(Commit) 뢄리 μ œμ•½:** κΈ°λŠ₯ μΆ”κ°€ ν™œλ™κ³Ό λ¦¬νŒ©ν† λ§ ν™œλ™μ„ λ’€μ„žμ–΄μ„œ μˆ˜ν–‰ν•  경우, μΆ”ν›„ μ½”λ“œμ—μ„œ λ°œμƒν•œ 버그가 μƒˆλ‘œμš΄ κΈ°λŠ₯ μΆ”κ°€λ‘œ μΈν•œ 것인지 λ¦¬νŒ©ν† λ§ κ³Όμ •μ—μ„œμ˜ μ‹€μˆ˜ λ•Œλ¬ΈμΈμ§€ κ·Έ 원인을 νŒŒμ•…ν•˜κΈ° 맀우 μ–΄λ €μ›Œμ Έ 디버깅 효율이 κΈ‰κ²©νžˆ μ €ν•˜λ˜λŠ” 치λͺ…적인 μ œμ•½μ΄ λ”°λ₯Έλ‹€ [2]. λ”°λΌμ„œ λ‹€λ₯Έ λ³€κ²½ 사항과 λ¦¬νŒ©ν† λ§μ„ μ² μ €νžˆ κ²©λ¦¬ν•˜μ—¬ 독립적인 컀밋(Commit) λ‹¨μœ„λ‘œ λΆ„λ¦¬ν•˜λŠ” 것이 μš”κ΅¬λœλ‹€ [5]. --- *Last updated: 2026-05-03*