# [[DRY (Don't Repeat Yourself)]] ## πŸ“Œ Brief Summary DRY(Don't Repeat Yourself)λŠ” μ†Œν”„νŠΈμ›¨μ–΄ κ°œλ°œμ—μ„œ 널리 μ“°μ΄λŠ” μ§€ν˜œμ΄μž μ½”λ“œμ˜ 쀑볡을 ν”Όν•˜κΈ° μœ„ν•œ 핡심 μ›μΉ™μž…λ‹ˆλ‹€ [1, 2]. ν”„λ‘œκ·Έλž˜λ°μ—μ„œ μ½”λ“œ 쀑볡은 μ½”λ“œλ₯Ό μœ μ§€λ³΄μˆ˜ν•˜κΈ° μ–΄λ ΅κ²Œ λ§Œλ“€κΈ° λ•Œλ¬Έμ— ν”Όν•΄μ•Ό ν•  λ‚˜μœ κ΄€ν–‰(bad practice)으둜 κ°„μ£Όλ©λ‹ˆλ‹€ [3]. κ·ΈλŸ¬λ‚˜ 이 원칙은 μ’…μ’… μ˜€ν•΄λ₯Ό λ°›μœΌλ©°, 쀑볡을 무쑰건 μ œκ±°ν•˜κΈ° μœ„ν•΄ 잘λͺ»λœ 좔상화λ₯Ό λ„μž…ν•˜κΈ°λ³΄λ‹€λŠ” λ•Œλ‘œλŠ” μš°μ—°ν•œ 쀑볡을 κ·ΈλŒ€λ‘œ λ‘λŠ” 것이 더 λ‚˜μ€ 선택일 수 μžˆμŠ΅λ‹ˆλ‹€ [1]. ## πŸ“– Core Content * **μ€‘λ³΅μ˜ μœ„ν—˜μ„±:** μ½”λ“œ 쀑볡은 μ†Œν”„νŠΈμ›¨μ–΄μ˜ μœ μ§€λ³΄μˆ˜μ„±μ„ λ–¨μ–΄λœ¨λ¦¬λŠ” μ£Όμš” μ›μΈμž…λ‹ˆλ‹€ [3]. 볡제된 μ½”λ“œμ— μΈμ½”λ”©λœ κ·œμΉ™μ΄λ‚˜ 둜직이 변경될 경우, μ½”λ“œλ₯Ό κ΄€λ¦¬ν•˜λŠ” κ°œλ°œμžλŠ” μ€‘λ³΅λ˜μ–΄ μžˆλŠ” λͺ¨λ“  μœ„μΉ˜λ₯Ό μ°Ύμ•„λ‚΄μ–΄ μ •ν™•ν•˜κ²Œ μˆ˜μ •ν•΄μ•Ό ν•˜λŠ” 어렀움을 κ²ͺ게 λ©λ‹ˆλ‹€ [3]. * **μ˜¬λ°”λ₯Έ μΆ”μƒν™”μ˜ ν•„μš”μ„±:** κ°œλ°œμžλŠ” μ΄λŸ¬ν•œ 쀑볡을 λ°©μ§€ν•˜κΈ° μœ„ν•΄ μ˜¬λ°”λ₯Έ 좔상화(Correct abstractions)λ₯Ό μ°Ύμ•„ μ±…μž„μ„ 적절히 λΆ„λ¦¬ν•˜κ³  μ½”λ“œμ˜ μ˜λ„λ₯Ό λͺ…ν™•νžˆ ν•΄μ•Ό ν•©λ‹ˆλ‹€ [4]. * **μ˜€ν•΄μ™€ μš°μ—°ν•œ 쀑볡:** DRY 원칙은 맀우 νƒ€λ‹Ήν•˜μ§€λ§Œ 널리 μ˜€ν•΄λ°›κ³  μžˆλŠ” 원칙이기도 ν•©λ‹ˆλ‹€ [1]. 두 개의 μ½”λ“œ 쑰각이 겉보기에 동일해 보일지라도, μ‹€μ œλ‘œλŠ” μ„œλ‘œ μ „ν˜€ λ‹€λ₯Έ κ°œλ…μ΄λ‚˜ 좔상화λ₯Ό λ‚˜νƒ€λ‚΄λŠ” κ²½μš°κ°€ μžˆμŠ΅λ‹ˆλ‹€ [1]. 이 경우 두 μ½”λ“œμ˜ μœ μ‚¬μ„±μ€ μš°μ—°ν•œ(accidental) 쀑볡에 λΆˆκ³Όν•©λ‹ˆλ‹€ [1]. ## βš–οΈ Trade-offs & Caveats * **잘λͺ»λœ μΆ”μƒν™”μ˜ λΉ„μš©:** μš°μ—°νžˆ λ°œμƒν•œ 쀑볡을 λ§Ήλͺ©μ μœΌλ‘œ μ œκ±°ν•˜κΈ° μœ„ν•΄ μ–΅μ§€λ‘œ 좔상화λ₯Ό λ„μž…ν•˜λ©΄ μ½”λ“œμ˜ λ³΅μž‘μ„±μ΄ 컀지고 μœ μ§€λ³΄μˆ˜κ°€ 더 νž˜λ“€μ–΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€ [1]. 전문가인 μƒŒλ”” λ©”μΈ (Sandi Metz)λŠ” "잘λͺ»λœ 좔상화보닀 쀑볡이 훨씬 더 μ €λ ΄ν•˜λ‹€(Duplication is far cheaper than the wrong abstraction)"라고 μ§€μ ν•˜λ©°, μ–΄μ„€ν”ˆ 좔상화보닀 차라리 쀑볡을 μœ μ§€ν•˜λŠ” 것이 λ‚«λ‹€κ³  κ°•μ‘°ν•©λ‹ˆλ‹€ [1]. * **μ„±κΈ‰ν•œ λ¦¬νŒ©ν† λ§μ˜ μœ„ν—˜:** 쀑볡을 ν”Όν•˜κ³ μž μ„±κΈ‰ν•˜κ²Œ λ¦¬νŒ©ν† λ§μ„ μ‹œλ„ν•˜λ©΄ 잘λͺ»λœ 좔상화λ₯Ό 선택할 μœ„ν—˜μ΄ ν½λ‹ˆλ‹€ [3]. λ‚˜μœ μΆ”μƒν™”λŠ” μƒˆλ‘œμš΄ μš”κ΅¬μ‚¬ν•­μ΄ λ°œμƒν•  λ•Œλ§ˆλ‹€ λΆˆλ¦¬μ–Έ(boolean) λ§€κ°œλ³€μˆ˜λ‚˜ if λ¬Έ 등을 μ–΅μ§€λ‘œ λ§λŒ€μ–΄ κ΅¬ν˜„μ„ μ™œκ³‘ν•˜κ²Œ λ§Œλ“­λ‹ˆλ‹€ [5]. κ²°κ΅­ μ½”λ“œκ°€ 더 μ•…ν™”λ˜μ–΄ ν›—λ‚  λ‹€μ‹œ λ¦¬νŒ©ν† λ§ν•΄μ•Ό ν•˜λŠ” 상황을 μ΄ˆλž˜ν•©λ‹ˆλ‹€ [3]. * **λŒ€μ•ˆμ  μ ‘κ·Ό (3의 법칙):** 잘λͺ»λœ 좔상화λ₯Ό μ–΅μ§€λ‘œ κ°•μš”ν•˜λŠ” 였λ₯˜λ₯Ό ν”Όν•˜λ €λ©΄, 쀑볡이 μ„Έ 번 λ°œμƒν•  λ•ŒκΉŒμ§€ κΈ°λ‹€λ Έλ‹€κ°€ λ¦¬νŒ©ν† λ§μ„ μˆ˜ν–‰ν•˜λŠ” '3의 법칙(Rule of Three)'을 μ‚¬μš©ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€ [6]. λͺ…ν™•ν•œ 이름쑰차 지을 수 μ—†λŠ” 뢈λͺ…ν™•ν•œ 좔상화라면 차라리 쀑볡을 ν—ˆμš©ν•˜κ³ , 상황에 λŒ€ν•œ μΆ©λΆ„ν•œ μ»¨ν…μŠ€νŠΈκ°€ 확보될 λ•ŒκΉŒμ§€ κΈ°λ‹€λ €μ•Ό ν•©λ‹ˆλ‹€ [5, 7]. --- *Last updated: 2026-05-03*