# [[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*