# [[DRY Principle]] ## ๐Ÿ“Œ Brief Summary DRY๋Š” "Don't Repeat Yourself"์˜ ์•ฝ์ž๋กœ, ๋™์ผํ•œ ์ฝ”๋“œ๋ฅผ ๋‘ ๋ฒˆ ์ด์ƒ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ  ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ ์ค‘๋ณต์„ ํ”ผํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด๋ง ์›์น™์ž…๋‹ˆ๋‹ค [1, 2]. ์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ , ํ–ฅํ›„ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์—ฌ๋Ÿฌ ๊ณณ์„ ์ˆ˜์ •ํ•  ํ•„์š” ์—†์ด ๋‹จ์ผ ์ง€์ ์—์„œ๋งŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์—ฌ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค [2]. React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ์ฃผ๋กœ ๊ณตํ†ต ๋กœ์ง์„ ์ปค์Šคํ…€ ํ›…(Custom Hooks)์ด๋‚˜ ๊ณ ์ฐจ ์ปดํฌ๋„ŒํŠธ(Higher-Order Components)๋กœ ์ถ”์ถœํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค [3, 4]. ## ๐Ÿ“– Core Content - **๊ฐœ๋…๊ณผ ์žฅ์ **: DRY ์›์น™์„ ๋”ฐ๋ฅด์ง€ ์•Š์•„ ์ค‘๋ณต๋œ ์ฝ”๋“œ๊ฐ€ ๋งŽ์•„์ง€๋ฉด, ํ–ฅํ›„ ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‹œ ์—ฌ๋Ÿฌ ๋ถ€๋ถ„์„ ๋™์‹œ์— ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ์–ด๋ ค์›€์ด ๋”ฐ๋ฆ…๋‹ˆ๋‹ค [2]. ์ด ์›์น™์„ ์ ์šฉํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ๋ณ„๋„์˜ ์ปดํฌ๋„ŒํŠธ๋‚˜ ํ•จ์ˆ˜๋กœ ๋ถ„๋ฆฌํ•˜๋ฉด, ๋‹จ ํ•œ ๊ณณ์—์„œ๋งŒ ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋˜๋ฏ€๋กœ ์ฝ”๋“œ์˜ ๋ฐ˜๋ณต์„ ์ค„์ด๊ณ  ๊ด€๋ฆฌ๊ฐ€ ์šฉ์ดํ•ด์ง‘๋‹ˆ๋‹ค [2, 5]. ํŠนํžˆ ๋ฐ˜๋ณต์ ์ธ ๋กœ์ง์ด ๋งŽ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋งค์šฐ ์œ ์šฉํ•˜๊ฒŒ ์“ฐ์ž…๋‹ˆ๋‹ค [4]. - **React์—์„œ์˜ ์ ์šฉ ๋ฐฉ๋ฒ•**: React ๊ฐœ๋ฐœ์—์„œ DRY ์›์น™์€ ๋กœ์ง์„ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๋กœ ์ถ”์ถœํ•˜๋Š” ๊ฒƒ์„ ์žฅ๋ คํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ๋Š” ๋ฐ˜๋ณต๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์ปค์Šคํ…€ ํ›…์ด๋‚˜ ๊ณ ์ฐจ ์ปดํฌ๋„ŒํŠธ(HOC)๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ๋กœ์ง์˜ ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค [3, 4, 6]. - **์ ์šฉ ์‹œ ์ฃผ์˜์  ๋ฐ ํƒ€ ์›์น™๊ณผ์˜ ์กฐํ™”**: - DRY ์›์น™์„ ์ง€๋‚˜์น˜๊ฒŒ ๋งน์‹ ํ•˜๋ฉด ์ง€๋‚˜์น˜๊ฒŒ ๋ณต์žกํ•œ ์ถ”์ƒํ™”(overly complex abstractions)๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [5]. - ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ถ”์ƒํ™”๊ฐ€ ๋ณธ๋ž˜์˜ ๋ฐ˜๋ณต๋œ ์ฝ”๋“œ๋ณด๋‹ค ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง„๋‹ค๋ฉด, ์ด๋Š” ์ฝ”๋“œ๋ฅผ ๋‹จ์ˆœํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋ผ๋Š” **KISS (Keep It Simple, Stupid)** ์›์น™์„ ์œ„๋ฐฐํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค [3]. - ์„ฑ๊ธ‰ํ•œ ์ตœ์ ํ™”๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด, ์ฝ”๋“œ ํŒจํ„ด์ด ์„ธ ๋ฒˆ ์ด์ƒ ๋ฐ˜๋ณต๋  ๋•Œ๊นŒ์ง€ ์ถ”์ƒํ™”๋ฅผ ๋ณด๋ฅ˜ํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ธ ๊ถŒ์žฅ ์ง€์นจ์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•จ์œผ๋กœ์จ ์ฝ”๋“œ๋ฅผ ๋‹จ์ˆœํ•˜๊ณ  ๋””๋ฒ„๊น…ํ•˜๊ธฐ ์‰ฝ๊ฒŒ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [3]. - ๋ชจ๋“ˆํ˜• ์•„ํ‚คํ…์ฒ˜์ธ **Feature-Sliced Design (FSD)** ๊ฐ™์€ ๋ฐฉ๋ฒ•๋ก ์—์„œ๋„ DRY ์›์น™๊ณผ ์ง€์—ญ์ ์ธ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•(local customization) ์‚ฌ์ด์—์„œ ์ ์ ˆํ•œ ๊ท ํ˜•์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์„ ํ•ต์‹ฌ์œผ๋กœ ์‚ผ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค [7]. ## ๐Ÿ”— Knowledge Connections - **Related Topics:** [[KISS Principle]], [[YAGNI Principle]], [[Clean Code]], [[Custom Hooks]] - **Projects/Contexts:** [[React Architecture]], [[Feature-Sliced Design]], [[Frontend Refactoring]] - **Contradictions/Notes:** ์†Œ์Šค์— ๋”ฐ๋ฅด๋ฉด DRY ์›์น™์„ ํ†ตํ•ด ๋ฐ˜๋ณต์„ ์ค„์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ฌด๋ฆฌํ•˜๊ฒŒ ์ ์šฉํ•  ๊ฒฝ์šฐ ์ง€๋‚˜์น˜๊ฒŒ ๋ณต์žกํ•œ ์ถ”์ƒํ™”๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [5]. ์ด๋Š” ์ฝ”๋“œ๋ฅผ ๋‹จ์ˆœํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋ ค๋Š” KISS ์›์น™๊ณผ ์ƒ์ถฉ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ํŒจํ„ด์ด ์„ธ ๋ฒˆ ์ด์ƒ ๋ฐ˜๋ณต๋  ๋•Œ ์ถ”์ƒํ™”๋ฅผ ์ ์šฉํ•˜๋Š” ๋“ฑ ๋‘ ์›์น™ ์‚ฌ์ด์˜ ๊ท ํ˜•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค [3]. --- *Last updated: 2026-04-26*