--- category: Unified tags: [auto-consolidated, technical-documentation] title: [[Design Patterns]] last_updated: 2026-05-02 --- # [[Design Patterns]] ## ๐Ÿ“Œ Brief Summary Design Patterns(๋””์ž์ธ ํŒจํ„ด)์€ ์†Œํ”„ํŠธ์›จ์–ด ์ปดํฌ๋„ŒํŠธ๋‚˜ ๋ชจ๋“ˆ ๋‚ด์—์„œ ๋ฐ˜๋ณต์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ์„ค๊ณ„ ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ž‘๊ณ  ๋ฏธ์‹œ์ ์ธ(micro-level) ํ•ด๊ฒฐ์ฑ…์„ ์ œ๊ณตํ•˜๋Š” ํ‘œ์ค€ํ™”๋œ ์†”๋ฃจ์…˜์ด๋‹ค [1-3]. ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์ด ์‹œ์Šคํ…œ ์ „์ฒด์˜ ๊ณ ์ˆ˜์ค€ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•œ๋‹ค๋ฉด, ๋””์ž์ธ ํŒจํ„ด์€ ๊ฐœ๋ณ„ ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์˜ ํด๋ž˜์Šค ๊ฐ„ ์ƒํ˜ธ์ž‘์šฉ, ๊ฐ์ฒด ์ƒ์„ฑ, ํ–‰๋™ ๋ฐ ๊ตฌ์กฐ์  ์ธก๋ฉด์— ์ดˆ์ ์„ ๋งž์ถ˜๋‹ค [2-5]. ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋กœ Singleton, Factory Method, Observer, Strategy ํŒจํ„ด ๋“ฑ์ด ์žˆ๋‹ค [3, 5]. --- ๋””์ž์ธ ํŒจํ„ด์€ ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„์—์„œ ํ”ํžˆ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋“ค์— ๋Œ€ํ•ด ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ผ๋ฐ˜์ ์ธ ํ•ด๊ฒฐ์ฑ…์ด์ž ํ…œํ”Œ๋ฆฟ์ด๋‹ค[1, 2]. ํŠน์ •ํ•œ ์„ค๊ณ„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•  ์ˆ˜ ์žˆ๋Š” ์ฒญ์‚ฌ์ง„์˜ ์—ญํ• ์„ ํ•˜๋ฉฐ, ๊ฐœ๋ฐœ ํŒ€ ๋‚ด์—์„œ ํšจ์œจ์ ์œผ๋กœ ์†Œํ†ตํ•  ์ˆ˜ ์žˆ๋Š” ๊ณตํ†ต์˜ ์–ธ์–ด๋ฅผ ์ œ๊ณตํ•œ๋‹ค[1, 2]. ๋Œ€๊ทœ๋ชจ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์ฝ๊ณ  ์ดํ•ดํ•˜๋Š” ๊ณผ์ •์—์„œ๋Š” ์ด๋Ÿฌํ•œ ํŒจํ„ด์„ ์‹๋ณ„ํ•จ์œผ๋กœ์จ ํŠน์ • ์ฝ”๋“œ ๋ธ”๋ก์˜ ์—ญํ• ๊ณผ ์ฑ…์ž„์„ ์ฆ‰๊ฐ์ ์œผ๋กœ ํŒŒ์•…ํ•˜๊ณ  ์ธ์ง€์  ๋ถ€ํ•˜๋ฅผ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค[3, 4]. --- ๋””์ž์ธ ํŒจํ„ด(Design Patterns)์€ ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„์—์„œ ํ”ํžˆ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋“ค์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ด๊ณ  ๋ฐ˜๋ณต์ ์œผ๋กœ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ•ด๊ฒฐ์ฑ…์ž…๋‹ˆ๋‹ค [1]. ์ด๋Š” ์™„์„ฑ๋œ ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ ํŠน์ • ์„ค๊ณ„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ƒํ™ฉ์— ๋งž๊ฒŒ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•  ์ˆ˜ ์žˆ๋Š” ์ฒญ์‚ฌ์ง„(Blueprint) ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค [1, 2]. ๋ณต์žกํ•œ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์ฝ๊ณ  ๋ถ„์„ํ•  ๋•Œ ๋””์ž์ธ ํŒจํ„ด์„ ์‹๋ณ„ํ•ด ๋‚ด๋Š” ๊ฒƒ์€ ํ•ด๋‹น ์ฝ”๋“œ ๋ธ”๋ก์˜ ์ฑ…์ž„๊ณผ ์—ญํ• ์„ ์ฆ‰๊ฐ์ ์œผ๋กœ ํŒŒ์•…ํ•˜๊ณ  ์‹œ์Šคํ…œ์˜ ๋งˆ์ดํฌ๋กœ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ดํ•ดํ•˜๋Š” ๋ฐ ํ•ต์‹ฌ์ ์ธ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค [3]. ## ๐Ÿ“– Core Content * **์ •์˜ ๋ฐ ์—ญํ• :** ๋””์ž์ธ ํŒจํ„ด์€ ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ์˜ ๊ตฌํ˜„(Building/Coding) ๋‹จ๊ณ„์—์„œ ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์˜ ๊ณตํ†ต์ ์ธ ์„ค๊ณ„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ ์šฉ๋˜๋Š” ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์†”๋ฃจ์…˜์ด๋‹ค [3, 5]. ์ด๋Š” ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์ด ์ •์˜ํ•œ ์ „๋ฐ˜์ ์ธ ๊ฑฐ์‹œ์  ๊ตฌ์กฐ ๋‚ด์—์„œ ๋ฏธ์‹œ์ ์ธ ์„ค๊ณ„ ๊ฒฐ์ •์„ ๋‹ด๋‹นํ•˜๋ฉฐ, ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ(reusability), ๊ฐ€๋…์„ฑ(readability), ๊ทธ๋ฆฌ๊ณ  ์œ ์ง€๋ณด์ˆ˜์„ฑ(maintainability)์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ์—ญํ• ์„ ํ•œ๋‹ค [2]. * **์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด๊ณผ์˜ ์ฃผ์š” ์ฐจ์ด์ :** * **์ดˆ์ ๊ณผ ๋ฒ”์œ„(Scope & Focus):** ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์ด ๋Œ€๊ทœ๋ชจ ์ปดํฌ๋„ŒํŠธ์™€ ์‹œ์Šคํ…œ ์ „์ฒด์˜ ๊ตฌ์กฐ์  ์กฐ์ง ๋ฐ ์•ˆ์ •์„ฑ์— ์ดˆ์ ์„ ๋งž์ถ”๋Š” ๋ฐ˜๋ฉด, ๋””์ž์ธ ํŒจํ„ด์€ ์ข์€ ๋ฒ”์œ„๋ฅผ ๊ฐ€์ง€๋ฉฐ ๋‹จ์ผ ๋ชจ๋“ˆ์ด๋‚˜ ํด๋ž˜์Šค ๋‚ด๋ถ€์˜ ์—”ํ‹ฐํ‹ฐ ํ–‰๋™ ๋ฐ ๊ด€๊ณ„์— ์ง‘์ค‘ํ•œ๋‹ค [2-4]. * **์ ์šฉ ์‹œ๊ธฐ(Time of Application):** ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜๋Š” SDLC(์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ์ƒ๋ช…์ฃผ๊ธฐ)์˜ ์ดˆ๊ธฐ ์„ค๊ณ„ ๋‹จ๊ณ„์— ๊ฒฐ์ •๋˜์ง€๋งŒ, ๋””์ž์ธ ํŒจํ„ด์€ ์‹ค์ œ ์ฝ”๋”ฉ ๋ฐ ๊ตฌ์ถ• ๋‹จ๊ณ„์—์„œ ์ ์šฉ๋œ๋‹ค [5]. * **๋ฌธ์ œ ํ•ด๊ฒฐ ์˜์—ญ(Problem Addressed):** ์•„ํ‚คํ…์ฒ˜๋Š” ํ™•์žฅ์„ฑ, ๋ณด์•ˆ์„ฑ, ์‹ ๋ขฐ์„ฑ ๋“ฑ ์ „์—ญ์ ์ธ ์†์„ฑ์„ ๋‹ค๋ฃจ๊ณ , ๋””์ž์ธ ํŒจํ„ด์€ ๊ฐ์ฒด์˜ ์ƒ์„ฑ, ์ƒํ˜ธ์ž‘์šฉ, ๋™์ž‘(behavior) ๋“ฑ ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌ์ถ• ๋ฐ ๊ตฌํ˜„๊ณผ ๊ด€๋ จ๋œ ๊ตฌ์ฒด์ ์ธ ์ด์Šˆ๋ฅผ ๋‹ค๋ฃฌ๋‹ค [5, 6]. * **๋ฌธ์„œํ™”(Documentation):** ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์€ ๊ณ ์ˆ˜์ค€ ์•„ํ‚คํ…์ฒ˜ ๋‹ค์ด์–ด๊ทธ๋žจ์ด๋‚˜ ์„ค๊ณ„ ๋ฌธ์„œ๋กœ ํ‘œํ˜„๋˜๋‚˜, ๋””์ž์ธ ํŒจํ„ด์€ UML ๋‹ค์ด์–ด๊ทธ๋žจ์ด๋‚˜ ์„ธ๋ถ€ ์„ค๊ณ„ ๋ช…์„ธ์„œ(detailed design specifications)๋กœ ๋ฌธ์„œํ™”๋œ๋‹ค [3]. * **๋ถ„๋ฅ˜ ๋ฐ ์ฃผ์š” ์˜ˆ์‹œ:** ๋””์ž์ธ ํŒจํ„ด์€ ๋ชฉ์ ์— ๋”ฐ๋ผ ์ƒ์„ฑ(Creational), ๊ตฌ์กฐ(Structural), ํ–‰๋™(Behavioral) ํŒจํ„ด์œผ๋กœ ๋ถ„๋ฅ˜๋  ์ˆ˜ ์žˆ๋‹ค [6, 7]. ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„ ์˜ˆ์‹œ๋กœ๋Š” Singleton, Factory Method, Observer, Strategy ํŒจํ„ด ๋“ฑ์ด ์žˆ๋‹ค [3, 5]. --- - **๋งˆ์ดํฌ๋กœ ์•„ํ‚คํ…์ฒ˜ ์ดํ•ด์˜ ํ•ต์‹ฌ:** ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ํ•ด๋…ํ•  ๋•Œ ์‹œ์Šคํ…œ์˜ ์ „์ฒด ๊ตฌ์กฐ๋ฅผ ํŒŒ์•…ํ•œ ์ดํ›„, ํด๋ž˜์Šค์™€ ๊ฐ์ฒด ๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ ๋ฐฉ์‹์—์„œ ๋””์ž์ธ ํŒจํ„ด์„ ์ฝ์–ด๋‚ด์•ผ ํ•œ๋‹ค[3]. ๋””์ž์ธ ํŒจํ„ด์€ ๊ฒ€์ฆ๋œ ํ•ด๋ฒ•์ด๋ฏ€๋กœ ์ด๋ฅผ ์‹๋ณ„ํ•˜๋Š” ์ฆ‰์‹œ ํ•ด๋‹น ์ฝ”๋“œ์˜ ์—ญํ• ๊ณผ ์ฑ…์ž„์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ˆ™๋ จ๋œ ์—”์ง€๋‹ˆ์–ด๋“ค ์‚ฌ์ด์˜ ๊ณตํ†ต๋œ ์„ค๊ณ„ ์–ธ์–ด๋กœ ๊ธฐ๋Šฅํ•˜์—ฌ ์ฝ”๋“œ ๊ฐ€๋…์„ฑ์„ ๋Œ€ํญ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค[3, 5]. - **์ƒ์„ฑ ํŒจํ„ด (Creational Patterns):** ๊ฐ์ฒด์˜ ์ƒ์„ฑ(์ธ์Šคํ„ด์Šคํ™”) ๊ณผ์ •์„ ์ถ”์ƒํ™”ํ•˜์—ฌ ๋กœ์ง์„ ์œ ์—ฐํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ํŒจํ„ด์ด๋‹ค[3, 6]. ์ƒ์†์ด๋‚˜ ์œ„์ž„์„ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์Šคํ„ด์Šคํ™”๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค[6]. ์‹œ์Šคํ…œ ๋‚ด์—์„œ ์œ ์ผํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ณด์žฅํ•˜๋Š” ์‹ฑ๊ธ€ํ†ค(Singleton), ๊ตฌ์ฒด์  ํด๋ž˜์Šค์— ์˜์กดํ•˜์ง€ ์•Š๊ณ  ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ(Factory Method) ๋ฐ ์ถ”์ƒ ํŒฉํ† ๋ฆฌ(Abstract Factory), ๋ณต์žกํ•œ ์ƒ์„ฑ ๋‹จ๊ณ„๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๋นŒ๋”(Builder), ํ”„๋กœํ† ํƒ€์ž…(Prototype), ๊ฐ์ฒด ํ’€(Object Pool) ๋“ฑ์ด ์žˆ๋‹ค[3, 6]. - **๊ตฌ์กฐ ํŒจํ„ด (Structural Patterns):** ํด๋ž˜์Šค๋‚˜ ๊ฐ์ฒด๋ฅผ ๋” ํฐ ๊ตฌ์กฐ๋กœ ์กฐํ•ฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์–ป๋Š” ํŒจํ„ด์ด๋‹ค[3, 7]. ์„œ๋กœ ๋‹ค๋ฅธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์–ด๋Œ‘ํ„ฐ(Adapter), ๊ตฌํ˜„๊ณผ ์ถ”์ƒํ™”๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๋ธŒ๋ฆฟ์ง€(Bridge), ๋ถ€๋ถ„-์ „์ฒด ๊ณ„์ธต์„ ํ‘œํ˜„ํ•˜๋Š” ์ปดํฌ์ง€ํŠธ(Composite), ๋ณต์žกํ•œ ์„œ๋ธŒ์‹œ์Šคํ…œ์— ๋Œ€ํ•ด ๋‹จ์ˆœํ™”๋œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•ด ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๋Š” ํผ์‚ฌ๋“œ(Facade), ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ(Decorator), ํ”Œ๋ผ์ด์›จ์ดํŠธ(Flyweight), ํ”„๋ก์‹œ(Proxy) ํŒจํ„ด ๋“ฑ์ด ํฌํ•จ๋œ๋‹ค[3, 7]. - **ํ–‰์œ„ ํŒจํ„ด (Behavioral Patterns):** ๊ฐ์ฒด ๊ฐ„์˜ ํ†ต์‹  ๋ฐฉ์‹๊ณผ ์ฑ…์ž„ ๋ถ„๋ฐฐ์— ๊ด€๋ จ๋œ ํŒจํ„ด์ด๋‹ค[5, 8]. ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ๊ด€์ฐฐ์ž๋“ค์—๊ฒŒ ์•Œ๋ฆฌ๋Š” ์˜ต์ €๋ฒ„(Observer), ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์บก์Аํ™”ํ•˜์—ฌ ๊ต์ฒด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ์ „๋žต(Strategy), ์š”์ฒญ์„ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋งค๊ฐœ๋ณ€์ˆ˜ํ™”ํ•˜๋Š” ์ปค๋งจ๋“œ(Command)๋ฅผ ๋น„๋กฏํ•ด ์ฑ…์ž„ ์—ฐ์‡„(Chain of responsibility), ์ดํ„ฐ๋ ˆ์ดํ„ฐ(Iterator), ๋ฏธ๋””์—์ดํ„ฐ(Mediator), ๋ฉ”๋ฉ˜ํ† (Memento), ์ƒํƒœ(State), ํ…œํ”Œ๋ฆฟ ๋ฉ”์„œ๋“œ(Template method), ๋น„์ง€ํ„ฐ(Visitor) ํŒจํ„ด ๋“ฑ์ด ์กด์žฌํ•œ๋‹ค[5, 8]. --- ๋Œ€๊ทœ๋ชจ ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ๊ณผ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ํ•ด์„ํ•˜๋Š” ๋ฐ ์žˆ์–ด ๋””์ž์ธ ํŒจํ„ด์€ ์ˆ™๋ จ๋œ ์—”์ง€๋‹ˆ์–ด๋“ค ์‚ฌ์ด์˜ ๊ณตํ†ต๋œ ์„ค๊ณ„ ์–ธ์–ด๋กœ ๊ธฐ๋Šฅํ•˜๋ฉฐ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค [4-6]. ์ „์ฒด ์‹œ์Šคํ…œ์˜ ๊ฑฐ์‹œ์ ์ธ ๊ตฌ์กฐ๋ฅผ ํŒŒ์•…ํ•œ ํ›„, ํด๋ž˜์Šค์™€ ๊ฐ์ฒด ๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ ๋ฐฉ์‹์—์„œ ๋””์ž์ธ ํŒจํ„ด์„ ์ฝ์–ด๋‚ด๋Š” ๊ณผ์ •์ด ์ˆ˜๋ฐ˜๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [3]. ๋””์ž์ธ ํŒจํ„ด์€ ๊ทธ ๋ชฉ์ ์— ๋”ฐ๋ผ ํฌ๊ฒŒ ์„ธ ๊ฐ€์ง€ ๋ฒ”์ฃผ๋กœ ๋ถ„๋ฅ˜๋ฉ๋‹ˆ๋‹ค: * **์ƒ์„ฑ ํŒจํ„ด (Creational Patterns):** ๊ฐ์ฒด์˜ ์ƒ์„ฑ ๊ณผ์ •์„ ์ถ”์ƒํ™”ํ•˜์—ฌ ์ธ์Šคํ„ด์Šคํ™” ๋กœ์ง์„ ์œ ์—ฐํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค [3]. ์ƒ์†์„ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์œ„์ž„(Delegation)์„ ํ†ตํ•ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, ์—ฌ๊ธฐ์—๋Š” ์‹œ์Šคํ…œ ๋‚ด ์œ ์ผํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ณด์žฅํ•˜๋Š” ์‹ฑ๊ธ€ํ†ค(Singleton), ๊ตฌ์ฒด์ ์ธ ํด๋ž˜์Šค์— ์˜์กดํ•˜์ง€ ์•Š๊ณ  ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ(Factory Method)์™€ ์ถ”์ƒ ํŒฉํ† ๋ฆฌ(Abstract Factory), ๋ณต์žกํ•œ ์ƒ์„ฑ ๋‹จ๊ณ„๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๋นŒ๋”(Builder) ๋“ฑ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค [3, 7]. * **๊ตฌ์กฐ ํŒจํ„ด (Structural Patterns):** ํด๋ž˜์Šค๋‚˜ ๊ฐ์ฒด๋ฅผ ๋” ํฐ ๊ตฌ์กฐ๋กœ ์กฐํ•ฉํ•˜๊ณ  ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ์‹์— ์ง‘์ค‘ํ•ฉ๋‹ˆ๋‹ค [3, 8]. ์„œ๋กœ ๋‹ค๋ฅธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์–ด๋Œ‘ํ„ฐ(Adapter), ๊ตฌํ˜„๊ณผ ์ถ”์ƒํ™”๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๋ธŒ๋ฆฟ์ง€(Bridge), ๋ถ€๋ถ„-์ „์ฒด ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ์ปดํฌ์ง€ํŠธ(Composite), ๋ณต์žกํ•œ ์„œ๋ธŒ์‹œ์Šคํ…œ์„ ๋‹จ์ˆœํ™”๋œ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ฎ์–ด ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๋Š” ํผ์‚ฌ๋“œ(Facade) ํŒจํ„ด ๋“ฑ์ด ๋Œ€ํ‘œ์ ์ž…๋‹ˆ๋‹ค [3]. * **ํ–‰์œ„ ํŒจํ„ด (Behavioral Patterns):** ๊ฐ์ฒด ๊ฐ„์˜ ํ†ต์‹ , ์ƒํ˜ธ์ž‘์šฉ ๋ฐฉ์‹, ๊ทธ๋ฆฌ๊ณ  ์ฑ…์ž„์„ ๋ถ„๋ฐฐํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๊ด€ํ•œ ํŒจํ„ด์ž…๋‹ˆ๋‹ค [6, 9]. ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ๊ด€์ฐฐ์ž๋“ค์—๊ฒŒ ์•Œ๋ฆฌ๋Š” ์˜ต์ €๋ฒ„(Observer), ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์บก์Аํ™”ํ•˜์—ฌ ๊ต์ฒด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ์ „๋žต(Strategy), ์š”์ฒญ์„ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ปค๋งจ๋“œ(Command) ํŒจํ„ด ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค [6]. ์ด๋Ÿฌํ•œ ํŒจํ„ด๋“ค์„ ๋ช…ํ™•ํžˆ ๋ฌธ์„œํ™”ํ•˜๊ณ  ์žฌ์‚ฌ์šฉํ•จ์œผ๋กœ์จ, ์•„ํ‚คํ…ํŠธ์™€ ๊ฐœ๋ฐœ์ž๋Š” ๋‚˜์ค‘์— ๊ตฌํ˜„ ๋‹จ๊ณ„์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฏธ๋ฌ˜ํ•œ ๋ฌธ์ œ๋“ค์„ ์‚ฌ์ „์— ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [1, 5]. ## โš–๏ธ Trade-offs & Caveats ์†Œ์Šค์— ๊ด€๋ จ ์ •๋ณด๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค. (์ œ๊ณต๋œ ์†Œ์Šค ๋ฐ์ดํ„ฐ๋Š” ๋‹ค์–‘ํ•œ '์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด'์˜ ์žฅ๋‹จ์  ๋ฐ ํ•œ๊ณ„์— ๋Œ€ํ•ด์„œ๋Š” ๋งค์šฐ ์ƒ์„ธํžˆ ๋‹ค๋ฃจ๊ณ  ์žˆ์œผ๋‚˜, '๋””์ž์ธ ํŒจํ„ด(Design Patterns)' ์ž์ฒด๋ฅผ ์ ์šฉํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€์ž‘์šฉ, ์ œ์•ฝ ์‚ฌํ•ญ, ํ˜น์€ ๋ฐ˜๋Œ€ ๊ธ‰๋ถ€ ๋“ฑ์— ๋Œ€ํ•œ ๊ตฌ์ฒด์ ์ธ ์ •๋ณด๋Š” ํฌํ•จํ•˜๊ณ  ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.) --- ๋””์ž์ธ ํŒจํ„ด์˜ ์ ์šฉ์€ ์œ ์šฉํ•˜์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋น„ํŒ๊ณผ ์ œ์•ฝ ์‚ฌํ•ญ(Trade-off)์„ ์ˆ˜๋ฐ˜ํ•œ๋‹ค: - **ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ์ถ”์ƒํ™” ํ•œ๊ณ„ ์€ํ:** ํŒจํ„ด์˜ ํ•„์š”์„ฑ์€ ์ข…์ข… ์ปดํ“จํ„ฐ ์–ธ์–ด๋‚˜ ๊ธฐ์ˆ  ์ž์ฒด์˜ ์ถ”์ƒํ™” ๋Šฅ๋ ฅ์ด ๋ถˆ์ถฉ๋ถ„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•œ๋‹ค[9]. ์ด์ƒ์ ์ธ ํŒฉํ† ๋ง ํ™˜๊ฒฝ์—์„œ๋Š” ๊ฐœ๋…์„ ๋‹จ์ˆœํžˆ '์ฐธ์กฐ'ํ•˜๋ฉด ๋˜๋ฉฐ, Lisp์ด๋‚˜ Dylan๊ณผ ๊ฐ™์€ ํŠน์ • ์–ธ์–ด์—์„œ๋Š” ๋””์ž์ธ ํŒจํ„ด์˜ ์ƒ๋‹น์ˆ˜๊ฐ€ ์–ธ์–ด์˜ ์ง์ ‘์ ์ธ ์ง€์›์„ ํ†ตํ•ด ๋‹จ์ˆœํ™”๋˜๊ฑฐ๋‚˜ ์ œ๊ฑฐ๋  ์ˆ˜ ์žˆ๋‹ค[9]. - **๋น„ํšจ์œจ์ ์ธ ์†”๋ฃจ์…˜ ๋ฐ ์ฝ”๋“œ ์ค‘๋ณต ์ดˆ๋ž˜:** ๋””์ž์ธ ํŒจํ„ด์€ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ํ‘œ์ค€ํ™”ํ•˜๋ ค๋Š” ์‹œ๋„์ด์ง€๋งŒ, ์‹ค๋ฌด์—์„œ๋Š” '์ ๋‹นํžˆ ์ข‹์€(just barely good enough)' ํŒจํ„ด์„ ๋ฌด๋ฆฌํ•˜๊ฒŒ ๋ผ์›Œ ๋งž์ถ”๋ ค๋‹ค ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์ค‘๋ณต์„ ๋‚ณ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค[10]. ๋งน๋ชฉ์ ์ธ ํŒจํ„ด ์ ์šฉ๋ณด๋‹ค๋Š” ์ž˜ ๊ตฌ์กฐํ™”๋œ(well-factored) ๊ตฌํ˜„์ด ๊ฑฐ์˜ ํ•ญ์ƒ ๋” ํšจ์œจ์ ์ธ ํ•ด๊ฒฐ์ฑ…์ด๋‹ค[10]. - **ํ˜•์‹์  ๊ธฐ๋ฐ˜ ๋ถ€์กฑ ๋ฐ ์ฐจ๋ณ„์„ฑ ์˜๋ฌธ:** ๋””์ž์ธ ํŒจํ„ด์— ๋Œ€ํ•œ ์—ฐ๊ตฌ๋Š” ์ง€๋‚˜์น˜๊ฒŒ ์ž„์‹œ๋ฐฉํŽธ์ (ad hoc)์ด๋ฉฐ ๋” ๊ณต์‹์ ์ธ ๊ธฐ๋ฐ˜์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๋น„ํŒ์„ ๋ฐ›๋Š”๋‹ค[10]. ๋˜ํ•œ, ๋ชจ๋ธ-๋ทฐ-์ปจํŠธ๋กค๋Ÿฌ(MVC) ํŒจ๋Ÿฌ๋‹ค์ž„์ฒ˜๋Ÿผ ๋””์ž์ธ ํŒจํ„ด์ด๋ผ๋Š” ๊ฐœ๋…์ด ๋“ฑ์žฅํ•˜๊ธฐ ์ „๋ถ€ํ„ฐ ์กด์žฌํ•˜๋˜ ์ถ”์ƒํ™” ํ˜•ํƒœ์™€ ํฌ๊ฒŒ ๋‹ค๋ฅด์ง€ ์•Š์œผ๋ฉฐ, ๊ฑด์ถ•๊ณ„์˜ ์šฉ์–ด๋ฅผ ๋นŒ๋ ค ๊ธฐ์กด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ˜„์ƒ์„ ํฌ์žฅํ•œ ๊ฒƒ์— ๋ถˆ๊ณผํ•˜๋‹ค๋Š” ์ง€์ ๋„ ์žˆ๋‹ค[11]. --- ๋””์ž์ธ ํŒจํ„ด์˜ ๋„์ž… ๋ฐ ํ™œ์šฉ๊ณผ ๊ด€๋ จํ•˜์—ฌ ์ปดํ“จํ„ฐ ๊ณผํ•™ ๋ถ„์•ผ์—์„œ ์ œ๊ธฐ๋˜๋Š” ๋ช‡ ๊ฐ€์ง€ ์ œ์•ฝ ์‚ฌํ•ญ๊ณผ ๋น„ํŒ์  ์‹œ๊ฐ(Trade-off)์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค: * **์–ธ์–ด์  ์ถ”์ƒํ™”์˜ ํ•œ๊ณ„ ๋ณด์™„ (Targets the wrong problem):** ์ผ๊ฐ์—์„œ๋Š” ๋””์ž์ธ ํŒจํ„ด์ด ์ปดํ“จํ„ฐ ์–ธ์–ด์˜ ๋ถˆ์ถฉ๋ถ„ํ•œ ์ถ”์ƒํ™” ๋Šฅ๋ ฅ์„ ๋ฉ”์šฐ๊ธฐ ์œ„ํ•œ ๋ฏธ๋ด‰์ฑ…์ด๋ผ๊ณ  ๋น„ํŒํ•ฉ๋‹ˆ๋‹ค [10]. ์˜ˆ๋ฅผ ๋“ค์–ด Lisp๋‚˜ Dylan ๊ฐ™์ด ๋” ํ‘œํ˜„๋ ฅ์ด ํ’๋ถ€ํ•œ ์–ธ์–ด์—์„œ๋Š” ๋ณต์‚ฌ(Copy) ๋Œ€์‹  ์ฐธ์กฐ(Reference)๋ฅผ ํ†ตํ•ด ๊ฐœ๋…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด ๋””์ž์ธ ํŒจํ„ด 23๊ฐœ ์ค‘ 16๊ฐœ๊ฐ€ ๋‹จ์ˆœํ™”๋˜๊ฑฐ๋‚˜ ์ œ๊ฑฐ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [10]. * **๋น„ํšจ์œจ์ ์ธ ํ•ด๊ฒฐ์ฑ… ์œ ๋ฐœ (Leads to inefficient solutions):** ๋””์ž์ธ ํŒจํ„ด์€ ์ด๋ฏธ ๋„๋ฆฌ ์ธ์ •๋ฐ›์€ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ํ‘œ์ค€ํ™”ํ•˜๋ ค๋Š” ์‹œ๋„์ด์ง€๋งŒ, ์‹ค๋ฌด์—์„œ๋Š” ์ฝ”๋“œ์˜ ๋ถˆํ•„์š”ํ•œ ์ค‘๋ณต์„ ์ดˆ๋ž˜ํ•  ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค [11]. ๋•Œ๋กœ๋Š” ๋‹จ์ˆœํžˆ "์ ๋‹นํžˆ ์ข‹์€" ๋””์ž์ธ ํŒจํ„ด์„ ๊ธฐ๊ณ„์ ์œผ๋กœ ๋ผ์›Œ ๋„ฃ๋Š” ๊ฒƒ๋ณด๋‹ค ์ž˜ ๊ตฌ์กฐํ™”๋œ(Well-factored) ์ž์ฒด ๊ตฌํ˜„์ด ํ›จ์”ฌ ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [11]. * **ํ˜•์‹์  ๊ธฐ๋ฐ˜ ๋ถ€์กฑ ๋ฐ ์šฉ์–ด ๋‚จ์šฉ (Lacks formal foundations / Does not differ significantly):** ๋””์ž์ธ ํŒจํ„ด ์—ฐ๊ตฌ๊ฐ€ ์ง€๋‚˜์น˜๊ฒŒ ์ž„์‹œ๋ฐฉํŽธ์ (Ad hoc)์ด๋ผ๋Š” ์ง€์ ์ด ์กด์žฌํ•˜๋ฉฐ, ๊ธฐ์กด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ˜„์ƒ์„ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ๊ฑด์ถ•ํ•™ ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ์šฉ์–ด๋ฅผ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์ฐจ์šฉํ–ˆ๋‹ค๋Š” ๋น„ํŒ์„ ๋ฐ›๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค [11, 12]. ## ๐Ÿ”— Knowledge Connections ### Related Concepts #### [๊ด€๊ณ„ ์œ ํ˜•: ์ƒ์œ„ ๊ฐœ๋…/ํ”„๋ ˆ์ž„์›Œํฌ] - [[Software Architecture Patterns]] - ์—ฐ๊ฒฐ ์ด์œ : ๋””์ž์ธ ํŒจํ„ด์ด ๊ฐœ๋ณ„ ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์˜ ๋ฏธ์‹œ์ (micro-level) ๊ตฌ์กฐ๋ฅผ ๋‹ค๋ฃฌ๋‹ค๋ฉด, ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์€ ์ด๋Ÿฌํ•œ ์ปดํฌ๋„ŒํŠธ๋“ค์ด ๋ชจ์—ฌ ์ด๋ฃจ๋Š” ์ „์ฒด ์‹œ์Šคํ…œ์˜ ๊ฑฐ์‹œ์ (macro-level) ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•˜๋Š” ์ƒ์œ„ ๊ฐœ๋…์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [2-4]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ํ•˜์œ„ ์ˆ˜์ค€์˜ ๋””์ž์ธ ํŒจํ„ด์ด ์–ด๋–ป๊ฒŒ ์ƒ์œ„ ์ˆ˜์ค€์˜ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด(์˜ˆ: Layered, Microservices ๋“ฑ)์ด ์ œ์‹œํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ ๋‚ด์— ํ†ตํ•ฉ๋˜์–ด ์‹œ์Šคํ…œ ์ „์ฒด์˜ ์ผ๊ด€์„ฑ์„ ํ˜•์„ฑํ•˜๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค [1-3]. #### [๊ด€๊ณ„ ์œ ํ˜•: ์ƒ์„ธ ๊ตฌํ˜„ ๋„๊ตฌ ๋ฐ ์˜ˆ์‹œ] - [[Singleton Pattern]] - ์—ฐ๊ฒฐ ์ด์œ : ์†Œ์Šค์—์„œ ๋””์ž์ธ ํŒจํ„ด์˜ ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์‹œ ์ค‘ ํ•˜๋‚˜๋กœ ๋ฐ˜๋ณตํ•ด์„œ ์–ธ๊ธ‰๋œ ํŒจํ„ด์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [3, 5]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์†Œํ”„ํŠธ์›จ์–ด ๋ชจ๋“ˆ ๋‚ด์—์„œ ๊ฐ์ฒด ์ƒ์„ฑ(Object creation)๊ณผ ๊ด€๋ จ๋œ ๊ตฌ์ฒด์ ์ธ ์„ค๊ณ„ ๋ฌธ์ œ๋ฅผ ๋””์ž์ธ ํŒจํ„ด์ด ์–ด๋–ป๊ฒŒ ํ‘œ์ค€ํ™”๋œ ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค [3, 5]. - [[Observer Pattern]] - ์—ฐ๊ฒฐ ์ด์œ : ์ปดํฌ๋„ŒํŠธ์˜ ํ–‰๋™(Behavioral) ๋ฐ ์ƒํ˜ธ์ž‘์šฉ ์ธก๋ฉด์„ ๋‹ค๋ฃจ๋Š” ๋””์ž์ธ ํŒจํ„ด์˜ ์‚ฌ๋ก€๋กœ ๋ช…์‹œ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [3, 5]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์‹œ์Šคํ…œ ๋‚ด ํด๋ž˜์Šค๋‚˜ ๊ฐ์ฒด ๊ฐ„์˜ ํ–‰๋™ ๋ฐ ์ƒํƒœ ๋ณ€ํ™” ์•Œ๋ฆผ ๋ฌธ์ œ๋ฅผ ๋””์ž์ธ ํŒจํ„ด์œผ๋กœ ์–ด๋–ป๊ฒŒ ๊ทœ๊ฒฉํ™”ํ•˜์—ฌ ํ•ด๊ฒฐํ•˜๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค [3, 5]. ### Deeper Research Questions - ๋””์ž์ธ ํŒจํ„ด์„ ์‹œ์Šคํ…œ ์ „๋ฐ˜์— ๊ณผ๋„ํ•˜๊ฒŒ ์ ์šฉ(Over-engineering)ํ–ˆ์„ ๋•Œ ์ฝ”๋“œ์˜ ๋ณต์žก์„ฑ์ด๋‚˜ ์„ฑ๋Šฅ์— ๋ฏธ์น˜๋Š” ๋ถ€์ •์ ์ธ ์˜ํ–ฅ(Trade-off)์€ ๋ฌด์—‡์ธ๊ฐ€? - ์ƒ์„ฑ(Creational), ๊ตฌ์กฐ(Structural), ํ–‰๋™(Behavioral) ๋””์ž์ธ ํŒจํ„ด ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„๋กœ ์‹ค๋ฌด์—์„œ ๊ฐ€์žฅ ์ž์ฃผ ํ˜ผ์šฉ๋˜๊ฑฐ๋‚˜ ์˜ค์šฉ๋˜๋Š” ํŒจํ„ด์€ ๋ฌด์—‡์ด๋ฉฐ ๊ทธ ์ด์œ ๋Š” ๋ฌด์—‡์ธ๊ฐ€? - ํŠน์ •ํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด(์˜ˆ: Event-Driven Architecture)์˜ ๊ตฌํ˜„ ๋‹จ๊ณ„์—์„œ ํŠน๋ณ„ํžˆ ๊ถํ•ฉ์ด ์ž˜ ๋งž๊ฑฐ๋‚˜ ํ•„์ˆ˜์ ์œผ๋กœ ์š”๊ตฌ๋˜๋Š” ๋””์ž์ธ ํŒจํ„ด(์˜ˆ: Observer ํŒจํ„ด)์˜ ์กฐํ•ฉ ์‚ฌ๋ก€๋Š” ์–ด๋– ํ•œ๊ฐ€? - ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ(Microservices) ํ™˜๊ฒฝ์—์„œ ์ „ํ†ต์ ์ธ ๊ฐ์ฒด ์ง€ํ–ฅ ๋””์ž์ธ ํŒจํ„ด(GoF ํŒจํ„ด)์˜ ์—ญํ• ๊ณผ ์ ์šฉ ๋ฐฉ์‹์€ ์–ด๋–ป๊ฒŒ ๋ณ€ํ™”ํ•˜์˜€๋Š”๊ฐ€? - ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด๊ณผ ๋””์ž์ธ ํŒจํ„ด์˜ ๊ฒฝ๊ณ„๊ฐ€ ๋ชจํ˜ธํ•ด์ง€๋Š” ์‹ค์ œ ์‚ฌ๋ก€(์˜ˆ: MVC ํŒจํ„ด์ด ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ๋กœ ๋ถˆ๋ฆฌ๊ธฐ๋„ ํ•˜๊ณ  ๋””์ž์ธ ํŒจํ„ด์œผ๋กœ๋„ ์“ฐ์ด๋Š” ํ˜„์ƒ)๋ฅผ ๊ณตํ•™์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ๊ตฌ๋ถ„ํ•˜๊ณ  ํ•ด์„ํ•ด์•ผ ํ•˜๋Š”๊ฐ€? ### Practical Application Contexts - **Implementation:** ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์˜ ์ฝ”๋”ฉ ๋‹จ๊ณ„์—์„œ ๊ฐœ๋ณ„ ํด๋ž˜์Šค์˜ ๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ, ๋™์ž‘์„ ๋ถ€์—ฌํ•  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์„ค๊ณ„ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๊ฒ€์ฆ๋œ ํ‘œ์ค€ ํ•ด๊ฒฐ์ฑ…์œผ๋กœ ์ง์ ‘ ๊ตฌํ˜„์— ์ ์šฉ๋œ๋‹ค [3, 5, 6]. - **System Design:** ์†Œํ”„ํŠธ์›จ์–ด ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์˜ ์„ธ๋ถ€ ์„ค๊ณ„ ๋ช…์„ธ์„œ๋‚˜ UML ๋‹ค์ด์–ด๊ทธ๋žจ์„ ์ž‘์„ฑํ•  ๋•Œ, ํ•˜์œ„ ์ˆ˜์ค€(low-level)์˜ ๋™์ž‘ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๋ช…ํ™•ํžˆ ์ •์˜ํ•˜๋Š” ๋ฐ ํ™œ์šฉ๋œ๋‹ค [3]. - **Operation / Maintenance:** ํ‘œ์ค€ํ™”๋œ ํŒจํ„ด์„ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ(readability)๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ(reusability)์„ ๋†’์—ฌ์ฃผ์–ด, ์ถ”ํ›„ ์šด์˜ ๋ฐ ์œ ์ง€๋ณด์ˆ˜ ๊ณผ์ •์—์„œ ๊ฐœ๋ณ„ ๋ชจ๋“ˆ์˜ ์ˆ˜์ •์„ ํ›จ์”ฌ ์šฉ์ดํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค [1, 2]. - **Learning Path:** ๊ฑฐ์‹œ์ ์ธ '์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด'์„ ํ•™์Šตํ•˜๊ธฐ ์ „ํ›„์—, ์‹ค์ œ ์ฝ”๋“œ๊ฐ€ ๊ตฌ์„ฑ๋˜๋Š” ๋ฏธ์‹œ์  ๊ด€์ ์˜ ๊ฐ์ฒด ์ง€ํ–ฅ ์›์น™ ๋ฐ ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌ์ถ• ๊ธฐ๋ฒ•์„ ์ตํžˆ๋Š” ํ•„์ˆ˜ ํ•™์Šต ๊ฒฝ๋กœ๋กœ ํ™œ์šฉ๋œ๋‹ค [5, 6]. - **My Project Relevance:** ๊ฐœ๋ฐœ ์ค‘์ธ ํ”„๋กœ์ ํŠธ์—์„œ ํŠน์ • ์ปดํฌ๋„ŒํŠธ ๋‚ด์˜ ๋ณต์žกํ•œ ์กฐ๊ฑด๋ฌธ์ด๋‚˜ ๊ฐ์ฒด ์ƒ์„ฑ ๋กœ์ง์„ ๋งˆ์ฃผํ–ˆ์„ ๋•Œ, Factory๋‚˜ Strategy ํŒจํ„ด ๋“ฑ ์ ์ ˆํ•œ ๋””์ž์ธ ํŒจํ„ด์„ ๋„์ž…ํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ๋ฆฌํŒฉํ† ๋งํ•˜๊ณ  ๋ชจ๋“ˆ ๊ฐ„ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ๋‹ค [3, 5]. ### Adjacent Topics - [[UML Diagrams]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋””์ž์ธ ํŒจํ„ด์„ ์‹œ๊ฐ์ ์œผ๋กœ ๋ฌธ์„œํ™”ํ•˜๊ณ  ์„ธ๋ถ€ ์„ค๊ณ„ ๋ช…์„ธ์„œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋ธ๋ง ๋„๊ตฌ๋กœ์„œ, ๊ฐ ํŒจํ„ด์˜ ๊ตฌ์กฐ์ /ํ–‰๋™์  ํŠน์„ฑ์„ ์‹œ๊ฐํ™”ํ•˜์—ฌ ์ดํ•ดํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค [3, 7]. --- *Last updated: 2026-05-02* --- ### Related Concepts #### [์•„ํ‚คํ…์ฒ˜ ๋ฐ ์‹œ์Šคํ…œ ์„ค๊ณ„] - [[Layered Architecture]] - ์—ฐ๊ฒฐ ์ด์œ : ๋Œ€๊ทœ๋ชจ ์ฝ”๋“œ๋ฒ ์ด์Šค๋Š” ํŠน์ • ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ(๊ณ„์ธตํ˜• ๋“ฑ)์„ ๋”ฐ๋ฅด๋ฉฐ, ์ด๋Ÿฌํ•œ ๊ฑฐ์‹œ์  ์•„ํ‚คํ…์ฒ˜ ๋‚ด๋ถ€์˜ ํด๋ž˜์Šค ์ƒํ˜ธ์ž‘์šฉ(๋งˆ์ดํฌ๋กœ ์•„ํ‚คํ…์ฒ˜)์„ ๊ทœ์ •ํ•˜๋Š” ๊ฒƒ์ด ๋””์ž์ธ ํŒจํ„ด์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค[3, 12]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋งคํฌ๋กœ ์ˆ˜์ค€์˜ ๊ณ„์ธต ๋ถ„๋ฆฌ์™€ ๋งˆ์ดํฌ๋กœ ์ˆ˜์ค€์˜ ๊ฐ์ฒด ๊ฐ„ ํ†ต์‹  ํŒจํ„ด์ด ์–ด๋–ป๊ฒŒ ์กฐํ™”๋ฅผ ์ด๋ฃจ์–ด ์‹œ์Šคํ…œ์„ ๊ตฌ์„ฑํ•˜๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค[3, 12, 13]. - [[Clean Architecture]] - ์—ฐ๊ฒฐ ์ด์œ : ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜์˜ ํ•ต์‹ฌ์ธ ์˜์กด์„ฑ ์—ญ์ „ ์›์น™์„ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด, ์™ธ๋ถ€ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ์œ ์ฆˆ์ผ€์ด์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์–ด๋Œ‘ํ„ฐ(Adapter) ํŒจํ„ด ๋“ฑ ๋‹ค์–‘ํ•œ ๊ตฌ์กฐ ํŒจํ„ด์ด ํ•„์ˆ˜์ ์œผ๋กœ ํ™œ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค[3, 13, 14]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์•„ํ‚คํ…์ฒ˜๊ฐ€ ๋ถ€ํŒจํ•˜์ง€ ์•Š๋„๋ก ์˜์กด์„ฑ์˜ ๋ฐฉํ–ฅ์„ ์ œ์–ดํ•˜๋Š” ์‹ค๋ฌด์  ๊ตฌํ˜„์ฒด๋กœ์„œ ๋””์ž์ธ ํŒจํ„ด์˜ ์—ญํ• ์„ ๊นŠ์ด ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค[13, 14]. - [[Domain-Driven Design (DDD)]] - ์—ฐ๊ฒฐ ์ด์œ : DDD ๊ธฐ๋ฐ˜ ์ฝ”๋“œ๋ฒ ์ด์Šค๋Š” ์—”ํ‹ฐํ‹ฐ, ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ, ๊ฐ’ ๊ฐ์ฒด ๋“ฑ์˜ ํŒจํ„ด์„ ๋นˆ๋ฒˆํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ด๋Š” ๋””์ž์ธ ํŒจํ„ด๊ณผ ์œตํ•ฉ๋˜์–ด ์ฝ”๋“œ์˜ ์„ธ๋ถ€ ๋กœ์ง๋ณด๋‹ค ๋น„์ฆˆ๋‹ˆ์Šค ์˜๋„๋ฅผ ํŒŒ์•…ํ•˜๊ฒŒ ๋•๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค[13, 14]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ตฌ์กฐํ™”ํ•˜๋Š” ๋ฐ ๋””์ž์ธ ํŒจํ„ด์ด ๋„๋ฉ”์ธ ์ง€์‹๊ณผ ์–ด๋–ป๊ฒŒ ๊ฒฐํ•ฉ๋˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค[13, 14]. #### [์ฝ”๋“œ ๋ถ„์„ ๋ฐ ๋…ํ•ด ๋ฐฉ๋ฒ•๋ก ] - [[UML (Unified Modeling Language)]] - ์—ฐ๊ฒฐ ์ด์œ : ๋””์ž์ธ ํŒจํ„ด์˜ ๊ฐ์ฒด ๊ฐ„ ์ƒํ˜ธ์ž‘์šฉ ๋ฐ ์ •์  ๊ตฌ์กฐ(ํด๋ž˜์Šค ๋ฐ ์‹œํ€€์Šค ๋‹ค์ด์–ด๊ทธ๋žจ)๋ฅผ ์—”์ง€๋‹ˆ์–ด ๊ฐ„์— ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜๊ณ  ์‹œ๊ฐํ™”ํ•˜๋Š” ํ‘œ์ค€ํ™”๋œ ์–ธ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค[15-17]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ฝ์ง€ ์•Š๊ณ ๋„ ์‹œ๊ฐ์  ๋‹ค์ด์–ด๊ทธ๋žจ์„ ํ†ตํ•ด ๋””์ž์ธ ํŒจํ„ด์˜ ๋…ผ๋ฆฌ์  ํ๋ฆ„๊ณผ ์‹œ์Šคํ…œ ๊ตฌ์กฐ๋ฅผ ๋‹จ๋ฒˆ์— ํŒŒ์•…ํ•˜๋Š” ๊ธฐ๋ฒ•์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋‹ค[15, 17, 18]. - [[Code Refactoring]] - ์—ฐ๊ฒฐ ์ด์œ : ๋””์ž์ธ ํŒจํ„ด์ด ๋ฌด๋ฆฌํ•˜๊ฒŒ ์ ์šฉ๋˜์–ด ๋ฐœ์ƒํ•œ ์ฝ”๋“œ ์ค‘๋ณต๊ณผ ๋น„ํšจ์œจ์„ฑ์„ ๋ฐ”๋กœ์žก๊ฑฐ๋‚˜, ๋ฐ˜๋Œ€๋กœ ์ž˜ ์งœ์ธ ๊ตฌ์กฐ๋กœ ํƒˆ๋ฐ”๊ฟˆํ•˜๊ธฐ ์œ„ํ•ด ๋ฆฌํŒฉํ† ๋ง ๊ณผ์ •์ด ์ˆ˜๋ฐ˜๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค[10, 15, 19]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ž˜๋ชป ์ ์šฉ๋œ ํŒจํ„ด(Code Smells)์„ ์‹๋ณ„ํ•˜๊ณ , ํŒจํ„ด์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ ์šฉํ•˜๊ฑฐ๋‚˜ ํ•ด์ฒดํ•˜์—ฌ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ ๋ฐ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํ„ฐ๋“ํ•  ์ˆ˜ ์žˆ๋‹ค[10, 15, 19]. ### Deeper Research Questions - '์ ๋‹นํžˆ ์ข‹์€(just barely good enough)' ๋””์ž์ธ ํŒจํ„ด์„ ๋ฌด๋ฆฌํ•˜๊ฒŒ ์ ์šฉํ•˜์—ฌ ์˜คํžˆ๋ ค ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ๋น„ํšจ์œจ์„ฑ๊ณผ ์ค‘๋ณต์ด ์ฆ๊ฐ€ํ•œ ์‹ค์ œ ์‚ฌ๋ก€๋Š” ๋ฌด์—‡์ด๋ฉฐ, ์ด๋ฅผ ๊ตฌ์กฐ๋ฅผ ์ž˜ ์ง (well-factored) ์ฝ”๋“œ๋กœ ๋ฆฌํŒฉํ† ๋งํ•˜๋Š” ์ตœ์ ์˜ ์ „๋žต์€ ๋ฌด์—‡์ธ๊ฐ€? - Lisp์ด๋‚˜ Dylan๊ณผ ๊ฐ™์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ๊ฐ•๋ ฅํ•œ ์ถ”์ƒํ™” ๊ธฐ๋Šฅ์œผ๋กœ ์ธํ•ด ํŠน์ • ๋””์ž์ธ ํŒจํ„ด์ด ์†Œ๋ฉธํ•˜๋Š” ํ˜„์ƒ์ด ์ตœ์‹  ๋ชจ๋˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋“ค์˜ ์ง„ํ™” ๊ณผ์ •์—์„œ๋„ ๋™์ผํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚˜๊ณ  ์žˆ๋Š”๊ฐ€? - ๋Œ€๊ทœ๋ชจ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ํ•˜ํ–ฅ์‹(Top-Down)๊ณผ ์ƒํ–ฅ์‹(Bottom-Up)์œผ๋กœ ํƒ์ƒ‰ํ•  ๋•Œ, ํผ์‚ฌ๋“œ(Facade)๋‚˜ ์–ด๋Œ‘ํ„ฐ(Adapter) ๊ฐ™์€ ํŠน์ • ๊ตฌ์กฐ ํŒจํ„ด์„ ์‹๋ณ„ํ•˜๊ธฐ ๊ฐ€์žฅ ์œ ๋ฆฌํ•œ ๋ถ„์„ ๋‹จ๊ณ„๋Š” ์–ธ์ œ์ธ๊ฐ€? - ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜๋‚˜ ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜๊ฐ€ ์ ์šฉ๋œ ๊ฑฐ๋Œ€ํ•œ ์‹œ์Šคํ…œ์—์„œ ๋””์ž์ธ ํŒจํ„ด์˜ ์ ์šฉ ์ƒํƒœ๋ฅผ UML ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์ด๋‚˜ ์‹œํ€€์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์œผ๋กœ ์‹œ๊ฐํ™”ํ•  ๋•Œ ์ƒ๊ธฐ๋Š” ํ‘œํ˜„์˜ ํ•œ๊ณ„์ ๊ณผ ๊ทน๋ณต ๋ฐฉ์•ˆ์€ ๋ฌด์—‡์ธ๊ฐ€? - ๋””์ž์ธ ํŒจํ„ด์ด ์ ์šฉ๋œ ์˜๋„์™€ ํ˜„์žฌ ์ฝ”๋“œ์˜ ํ˜•ํƒœ๊ฐ€ ๋ถˆ์ผ์น˜ํ•˜์—ฌ ๊ธฐ์ˆ ์  ๋ถ€์ฑ„๊ฐ€ ๋œ ์ƒํ™ฉ์—์„œ, Git ์ปค๋ฐ‹ ์ด๋ ฅ ๋ฐ Pull Request ํ† ๋ก  ๋‚ด์šฉ์„ ํ†ตํ•ด ํŒจํ„ด ๋ณ€์งˆ์˜ ๊ทผ๋ณธ ์›์ธ์„ ์–ด๋–ป๊ฒŒ ์ฒด๊ณ„์ ์œผ๋กœ ์—ญ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? ### Practical Application Contexts - **Implementation:** ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ ๊ฐ์ฒด์˜ ์ธ์Šคํ„ด์Šคํ™”, ๊ตฌ์กฐ ๊ฒฐํ•ฉ, ๋กœ์ง ํ†ต์‹  ๋“ฑ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๊ณตํ†ต๋œ ์„ค๊ณ„ ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ƒ์„ฑ/๊ตฌ์กฐ/ํ–‰์œ„ ํŒจํ„ด์„ ์ ์šฉํ•˜์—ฌ ์žฌ์‚ฌ์šฉ์„ฑ ๋†’์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. - **System Design:** ์•„ํ‚คํ…์ฒ˜ ๋‚ด๋ถ€์˜ ๋งˆ์ดํฌ๋กœ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์„ค๊ณ„ํ•  ๋•Œ ๋””์ž์ธ ํŒจํ„ด์„ ๋„์ž…ํ•˜์—ฌ ๋ชจ๋“ˆ ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ๊ฐ ๊ฐ์ฒด์˜ ์ฑ…์ž„๊ณผ ์—ญํ• ์„ ๋ช…ํ™•ํžˆ ๊ทœ์ •ํ•œ๋‹ค. - **Operation / Maintenance:** ๋ฐฉ๋Œ€ํ•œ ๋ ˆ๊ฑฐ์‹œ ์‹œ์Šคํ…œ์ด๋‚˜ ํƒ€์ธ์˜ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์ฝ๊ณ  ํŒŒ์•…ํ•  ๋•Œ, ์ฝ”๋“œ ๋‚ด์˜ ๋””์ž์ธ ํŒจํ„ด์„ ๊ณตํ†ต ์„ค๊ณ„ ์–ธ์–ด๋กœ ์‹๋ณ„ํ•ด ๋ƒ„์œผ๋กœ์จ ์ „์ฒด ๋งฅ๋ฝ์„ ์ถ”๋ก ํ•˜๊ณ  ์ธ์ง€์  ๋ถ€ํ•˜๋ฅผ ํ˜„์ €ํžˆ ์ค„์ธ๋‹ค. - **Learning Path:** ์–ธ์–ด ๋ฌธ๋ฒ•์„ ์ˆ™์ง€ํ•œ ์ดํ›„, ํšจ๊ณผ์ ์ธ ์ฝ”๋“œ ๋…ํ•ด ์—ญ๋Ÿ‰๊ณผ ๊ตฌ์กฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‚ฌ๊ณ ๋ฅผ ๊ธฐ๋ฅด๊ธฐ ์œ„ํ•ด ๋””์ž์ธ ํŒจํ„ด์„ ํ•™์Šตํ•˜๋ฉฐ, ๊ทธ ํ•œ๊ณ„์™€ ๋ถ€์ž‘์šฉ์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ๋ฆฌํŒฉํ† ๋ง ๋ฐ ์•ˆํ‹ฐ ํŒจํ„ด ์ง€์‹์„ ๋ณ‘ํ–‰ ํ•™์Šตํ•œ๋‹ค. - **My Project Relevance:** ์ฝ”๋“œ๋ฒ ์ด์Šค ์˜จ๋ณด๋”ฉ ๋ฐ ์‹œ์Šคํ…œ ์—ญ๊ณตํ•™(Reverse-Engineering) ๋‹จ๊ณ„์—์„œ ์ฝ”๋“œ์˜ ํ๋ฆ„์„ ์ถ”์ ํ•  ๋•Œ ์ ์šฉ๋œ ๋””์ž์ธ ํŒจํ„ด์„ ํŒŒ์•…ํ•˜์—ฌ, ๊ฐ ํด๋ž˜์Šค๊ฐ€ ๋น„์ฆˆ๋‹ˆ์Šค ๋งฅ๋ฝ์—์„œ ๋‹ด๋‹นํ•˜๋Š” ๋ชฉ์ ์„ ๋น ๋ฅด๊ฒŒ ํ•ด๋…ํ•˜๋Š” ๋ฐ ์ง์ ‘์ ์œผ๋กœ ํ™œ์šฉํ•œ๋‹ค. ### Adjacent Topics - [[Code Smells]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ๊ณผ๋„ํ•˜๊ฑฐ๋‚˜ ์ž˜๋ชป๋œ ๋””์ž์ธ ํŒจํ„ด ์ ์šฉ์œผ๋กœ ์ธํ•ด ์ฝ”๋“œ๊ฐ€ ๋ ๊ฒŒ ๋˜๋Š” ๋ถ€์ •์  ํŠน์ง•(Code Smell)์„ ์ธ์ง€ํ•˜๊ณ  ์ด๋ฅผ ๊ต์ •ํ•˜๊ธฐ ์œ„ํ•œ ์ง•ํ›„ ๋ถ„์„ ์˜์—ญ์œผ๋กœ ์ดํ•ด๋ฅผ ํ™•์žฅํ•œ๋‹ค. - [[AntiPatterns]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋””์ž์ธ ํŒจํ„ด๊ณผ ๋ฐ˜๋Œ€๋˜๋Š” ๊ฐœ๋…์œผ๋กœ, ๋นˆ๋ฒˆํžˆ ๋„์ž…๋˜์ง€๋งŒ ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ฝ”๋“œ ๊ตฌ์กฐ๋ฅผ ๋ง์น˜๊ณ  ๋น„ํšจ์œจ์„ ์ดˆ๋ž˜ํ•˜๋Š” ์ž˜๋ชป๋œ ์„ค๊ณ„ ๊ด€ํ–‰๋“ค์„ ํƒ๊ตฌํ•˜์—ฌ ์•ˆํ‹ฐ ํŒจํ„ด์„ ์‹๋ณ„ํ•˜๊ณ  ๋ฐฉ์–ดํ•˜๋Š” ์ง€์‹์œผ๋กœ ํ™•์žฅํ•œ๋‹ค. --- *Last updated: 2026-05-02* --- ### Related Concepts #### [๋งˆ์ดํฌ๋กœ ์•„ํ‚คํ…์ฒ˜ ๋ฐ ์‹œ์Šคํ…œ ์„ค๊ณ„] - [[์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ (Architecture Styles)]] - ์—ฐ๊ฒฐ ์ด์œ : ๋””์ž์ธ ํŒจํ„ด์ด ํด๋ž˜์Šค์™€ ๊ฐ์ฒด ์ˆ˜์ค€์˜ ๋งˆ์ดํฌ๋กœ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋‹ค๋ฃฌ๋‹ค๋ฉด, ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ(์˜ˆ: ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜, ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜)์€ ์‹œ์Šคํ…œ ์ „์ฒด์˜ ๋งคํฌ๋กœ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค [3, 13]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ฑฐ์‹œ์ ์ธ ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์กฐ ๋‚ด์—์„œ ์„ธ๋ถ€์ ์ธ ๋””์ž์ธ ํŒจํ„ด์ด ์–ด๋–ป๊ฒŒ ๋ฐฐ์น˜๋˜๊ณ  ์‹œ์Šคํ…œ ์ „์ฒด์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ์กฐ์ ˆํ•˜๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - [[๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„ (Domain-Driven Design)]] - ์—ฐ๊ฒฐ ์ด์œ : DDD๊ฐ€ ์ ์šฉ๋œ ์ฝ”๋“œ๋ฒ ์ด์Šค ๋‚ด๋ถ€์—์„œ๋„ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์—”ํ‹ฐํ‹ฐ(Entities), ๊ฐ’ ๊ฐ์ฒด(Value Objects), ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ(Aggregates) ๋“ฑ์˜ ํŠน์ • ํŒจํ„ด์ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋“ฑ์žฅํ•ฉ๋‹ˆ๋‹ค [14]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ธฐ์ˆ ์ ์ธ ํ•ด๊ฒฐ์ฑ…์„ ๋„˜์–ด, ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ์˜ ์š”๊ตฌ์‚ฌํ•ญ์ด ์–ด๋–ป๊ฒŒ ํŒจํ„ดํ™”๋˜์–ด ์ฝ”๋“œ ๊ตฌ์กฐ๋กœ ๋ณ€ํ™˜๋˜๋Š”์ง€ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. #### [์ฝ”๋“œ๋ฒ ์ด์Šค ๋…ํ•ด ๋ฐ ๋ถ„์„๋ก ] - [[ํ•˜ํ–ฅ์‹ ๋ฐ ์ƒํ–ฅ์‹ ์ ‘๊ทผ๋ฒ• (Top-Down and Bottom-Up Approaches)]] - ์—ฐ๊ฒฐ ์ด์œ : ๋ณต์žกํ•œ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์ฝ์„ ๋•Œ ํ•˜ํ–ฅ์‹/์ƒํ–ฅ์‹์œผ๋กœ ์ „์ฒด ์ •๋ณด์˜ ํ๋ฆ„์„ ํŒŒ์•…ํ•œ ํ›„, ํŠน์ • ์ฝ”๋“œ ๋ธ”๋ก์˜ ๋™์ž‘์„ ๊ตฌ์ฒด์ ์œผ๋กœ ํ•ด๋…ํ•  ๋•Œ ๋””์ž์ธ ํŒจํ„ด ์‹๋ณ„์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค [3, 15]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ฑฐ๋Œ€ํ•œ ์‹œ์Šคํ…œ์„ ๋ถ„์„ํ•˜๋Š” ์ „๋žต์  ์ฒด๊ณ„ ์†์—์„œ ๋””์ž์ธ ํŒจํ„ด ์ธ์ง€๊ฐ€ ์–ด๋А ์‹œ์ ์— ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ ์šฉ๋˜์–ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ํ†ต์ฐฐ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - [[๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (Object-Oriented Programming)]] - ์—ฐ๊ฒฐ ์ด์œ : ๋Œ€๋ถ€๋ถ„์˜ ํด๋ž˜์‹ํ•œ ๋””์ž์ธ ํŒจํ„ด๋“ค์€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ƒ์†, ์œ„์ž„, ์บก์Аํ™”, ๋‹คํ˜•์„ฑ ๋“ฑ์„ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉํ•˜์—ฌ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค [7, 9]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋””์ž์ธ ํŒจํ„ด์ด ์™œ ๊ทธ๋Ÿฐ ํ˜•ํƒœ๋กœ ์งœ์˜€๋Š”์ง€ ๊ทธ ๊ทผ๋ณธ์ ์ธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๊ฟฐ๋šซ์–ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ### Deeper Research Questions - ํŠน์ • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด(Lisp, Dylan ๋“ฑ)์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜๋Š” ์ถ”์ƒํ™” ๋Šฅ๋ ฅ์ด ์–ด๋–ป๊ฒŒ ๊ธฐ์กด์˜ ๊ฐ์ฒด ์ง€ํ–ฅ ๋””์ž์ธ ํŒจํ„ด๋“ค์„ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”๊ฐ€? - ๋Œ€๊ทœ๋ชจ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ๋””์ž์ธ ํŒจํ„ด์˜ ๋ฌด๋ถ„๋ณ„ํ•œ ์ ์šฉ์ด ์˜คํžˆ๋ ค ์ฝ”๋“œ ์ค‘๋ณต์„ ๋‚ณ๊ณ  ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํ•ด์น˜๋Š” '์•ˆํ‹ฐํŒจํ„ด'์œผ๋กœ ์ „๋ฝํ•˜๋Š” ๊ตฌ์ฒด์  ์‚ฌ๋ก€์™€ ์กฐ๊ฑด์€ ๋ฌด์—‡์ธ๊ฐ€? - ๋ฌธ์„œํ™”๊ฐ€ ๋ถ€์กฑํ•œ ๋ ˆ๊ฑฐ์‹œ ์‹œ์Šคํ…œ์„ ์ƒํ–ฅ์‹์œผ๋กœ ๋ถ„์„ํ•  ๋•Œ, ๋‚œ๋…ํ™”๋˜๊ฑฐ๋‚˜ ๋ณ€ํ˜•๋œ ๋””์ž์ธ ํŒจํ„ด์„ ๋น ๋ฅด๊ณ  ์ •ํ™•ํ•˜๊ฒŒ ์—ญ์ถ”์ (Reverse-engineer)ํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก ์€ ๋ฌด์—‡์ธ๊ฐ€? - ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜(MSA) ๋ฐ ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ ํ™˜๊ฒฝ์˜ ๋“ฑ์žฅ์œผ๋กœ ์ธํ•ด ์ƒˆ๋กญ๊ฒŒ ๋Œ€๋‘๋œ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ ๋””์ž์ธ ํŒจํ„ด๋“ค์€ ๊ธฐ์กด์˜ ์ „ํ†ต์  GoF ํŒจํ„ด๊ณผ ์–ด๋–ป๊ฒŒ ๊ตฌ๋ณ„๋˜๋Š”๊ฐ€? - ํผ์‚ฌ๋“œ(Facade)๋‚˜ ์˜ต์ €๋ฒ„(Observer) ๋“ฑ ์—ฌ๋Ÿฌ ํŒจํ„ด์ด ์ฝ”๋“œ ๋‚ด์—์„œ ์ค‘์ฒฉ๋˜์–ด ์‚ฌ์šฉ๋˜์—ˆ์„ ๋•Œ, ์—”์ง€๋‹ˆ์–ด๊ฐ€ ๊ทธ ์ƒํ˜ธ์ž‘์šฉ์˜ ๋ณต์žก์„ฑ์„ ์‹œ๊ฐ์  ๋„๊ตฌ๋กœ ํ•ด๋…ํ•˜๋Š” ์ตœ์ ์˜ ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€? ### Practical Application Contexts - **Implementation:** ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ๊ตฌํ˜„ ์‹œ, ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฐ”๋‹ฅ๋ถ€ํ„ฐ ๋…ผ๋ฆฌ๋ฅผ ์งœ๋Š” ๋Œ€์‹  ์ด๋ฏธ ๊ฒ€์ฆ๋œ ํŒจํ„ด(์˜ˆ: ๊ฐ์ฒด ์ƒ์„ฑ์„ ์œ„ํ•œ Factory Method)์„ ๋„์ž…ํ•˜์—ฌ ๋” ์œ ์—ฐํ•˜๊ณ  ์ถ”์ƒํ™”๋œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค [3, 7]. - **System Design:** ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„ ๋ฐ ๋ฆฌ๋ทฐ ๋‹จ๊ณ„์—์„œ ํŒ€์›๋“ค ๊ฐ„์— "์ด ๋ถ€๋ถ„์€ ์ „๋žต(Strategy) ํŒจํ„ด์„ ์“ฐ์ž"๋ผ๊ณ  ์†Œํ†ตํ•จ์œผ๋กœ์จ ๋…ผ์˜๋ฅผ ํšจ์œจํ™”ํ•˜๊ณ  ๋ถˆํ•„์š”ํ•œ ์žฅํ™ฉํ•œ ์„ค๋ช…์„ ์ค„์ž…๋‹ˆ๋‹ค [5]. - **Operation / Maintenance:** ๋‹ค๋ฅธ ์—”์ง€๋‹ˆ์–ด๊ฐ€ ์ž‘์„ฑํ•œ ์ˆ˜๋ฐฑ๋งŒ ์ค„์˜ ์ฝ”๋“œ๋ฅผ ๋””๋ฒ„๊น…ํ•  ๋•Œ, ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ ๋นŒ๋”(Builder)๋‚˜ ๋ธŒ๋ฆฟ์ง€(Bridge) ํŒจํ„ด์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์Œ์„ ์ธ์ง€ํ•จ์œผ๋กœ์จ ์ฝ”๋“œ ๋ธ”๋ก์˜ ์ฑ…์ž„๊ณผ ํ•œ๊ณ„๋ฅผ ์ฆ‰๊ฐ์ ์œผ๋กœ ํŒŒ์•…ํ•˜๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค [3, 15]. - **Learning Path:** ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ์–ธ์–ด๋‚˜ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์˜คํ”ˆ์†Œ์Šค ์ €์žฅ์†Œ๋ฅผ ์ฝ์œผ๋ฉฐ, ํ•ด๋‹น ์–ธ์–ด์˜ ์ œ์•ฝ ์‚ฌํ•ญ์„ ์šฐํšŒํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๋””์ž์ธ ํŒจํ„ด์ด ์“ฐ์˜€๋Š”์ง€ ํƒ๊ตฌํ•˜์—ฌ ์–ธ์–ด์˜ ํŠน์„ฑ๊ณผ ์ˆ™๋ จ๋œ ๊ฐœ๋ฐœ์ž๋“ค์˜ ๊ด€ํ–‰์„ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค [3, 6]. - **My Project Relevance:** ๋ณต์žกํ•˜๊ฒŒ ์–ฝํžŒ ๋ชจ๋†€๋ฆฌ์‹ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๋ชจ๋“ˆํ™”ํ•˜๊ฑฐ๋‚˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ์ „ํ™˜ํ•˜๋Š” ๋ฆฌํŒฉํ† ๋ง ๊ณผ์ •์—์„œ ๊ธฐ์กด ์ฝ”๋“œ๊ฐ€ ๊ฐ€์ง€๋Š” ํŒจํ„ด์„ ์‹๋ณ„ํ•˜๊ณ  ๋ถ„๋ฆฌํ•ด ๋‚ด๋Š” ์—ญ๋Ÿ‰์œผ๋กœ ์ง๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ### Adjacent Topics - [[SOLID ์›์น™ (SOLID Principles)]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋งŽ์€ ๋””์ž์ธ ํŒจํ„ด๋“ค์ด ๋ชฉํ‘œ๋กœ ํ•˜๋Š” ๊ทผ๋ณธ์ ์ธ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„ ์›์น™(๋‹จ์ผ ์ฑ…์ž„, ๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™ ๋“ฑ)์— ๋Œ€ํ•ด ํ•™์Šตํ•˜์—ฌ ํŒจํ„ด์˜ ์กด์žฌ ์ด์œ ๋ฅผ ๋” ๊นŠ์ด ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค [16]. - [[์ฝ”๋“œ ์Šค๋ฉœ ๋ฐ ๋ฆฌํŒฉํ† ๋ง (Code Smells and Refactoring)]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ์ŠคํŒŒ๊ฒŒํ‹ฐ ์ฝ”๋“œ๋‚˜ ์ž˜๋ชป๋œ ์ƒ์† ๋“ฑ '์ฝ”๋“œ ์Šค๋ฉœ'์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์ฒด์ ์ธ ๋ฐฉ๋ฒ•๋ก ์œผ๋กœ์„œ ๋””์ž์ธ ํŒจํ„ด์„ ์–ด๋–ป๊ฒŒ ์ฃผ์ž…ํ•˜๊ฑฐ๋‚˜ ํ•ด์ฒดํ•ด์•ผ ํ•˜๋Š”์ง€ ํƒ๊ตฌํ•ฉ๋‹ˆ๋‹ค [17]. --- *Last updated: 2026-05-02* ## ๐Ÿงช ๊ฒ€์ฆ ์ƒํƒœ (Validation) - **์ •๋ณด ์ƒํƒœ:** draft - **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** A - **๊ฒ€ํ†  ์ด์œ :** Datacollector์—์„œ ์ž๋™ ์ถ”์ถœ๋œ ์œ„ํ‚ค ๋ฐ์ดํ„ฐ์˜ ์ดˆ๊ธฐ ํ†ตํ•ฉ. ## ๐Ÿงฌ ์ค‘๋ณต ๊ฒ€์‚ฌ (Duplicate Check) - **๊ธฐ์กด ์œ ์‚ฌ ๋ฌธ์„œ:** None - **์ฒ˜๋ฆฌ ๋ฐฉ์‹:** CREATE - **์ฒ˜๋ฆฌ ์ด์œ :** ์‹ ๊ทœ ์ง€์‹ ์ฒด๊ณ„ ๋„์ž