Deep Dive Into Design Patterns - ๋นŒ๋” ํŒจํ„ด

    ๐Ÿ’ก ๋นŒ๋”(Builder) ํŒจํ„ด์ด๋ž€?๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์ „์— ์ ์ง„์ ์œผ๋กœ ๊ฐ์ฒด์˜ ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•˜์—ฌ ๋ณต์žกํ•œ ๊ฐ์ฒด๋“ค์„ ๋‹จ๊ณ„ ๋ณ„๋กœ ์ƒ์„ฑํ•˜๋Š” ์ƒ์„ฑ ๋””์ž์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ์ƒ์„ฑ์ž์— ๋“ค์–ด๊ฐˆ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ๋ฉ”์„œ๋“œ๋กœ ํ•˜๋‚˜ํ•˜๋‚˜ ๋ฐ›์•„๋“ค์ด๊ณ  ๋งˆ์ง€๋ง‰์— ํ†ตํ•ฉ ๋นŒ๋“œํ•ด์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ์ƒ์„ฑ์ž๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€๋งŒ, ์ƒ์„ฑ ๊ฐ์ฒด์— ์ดˆ๊ธฐ๊ฐ’์„ ์ฃผ๊ฑฐ๋‚˜ ์ƒ์„ฑํ•  ํด๋ž˜์Šค๋ฅผ ์„ ํƒํ•˜๊ณ  ์‹ถ์„ ๋•Œ ๋ณ€ํ˜•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๊ฐ์ฒด ์ƒ์„ฑ์„ ํด๋ž˜์Šค ๋กœ์ง ๋ฐ–์œผ๋กœ ์˜ฎ๊ธธ ํ•„์š”๊ฐ€ ์žˆ์„ ๋•Œ ๋นŒ๋” ํŒจํ„ด์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.public static void main(String[] args) { // ์ƒ์„ฑ์ž ๋ฐฉ์‹ Hamburger hamburger = new Hamburger(2, 3, 0, 3, 0, 0); // ๋นŒ๋” ๋ฐฉ์‹ Hambu..

    Deep Dive Into Design Patterns - ํ”Œ๋ผ์ด์›จ์ดํŠธ ํŒจํ„ด

    ๐Ÿ’ก ํ”Œ๋ผ์ด์›จ์ดํŠธ(Flyweight) ํŒจํ„ด์ด๋ž€?์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค๋ฅผ ๊ณต์œ ์‹œ์ผœ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ตฌ์กฐ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ๊ฐ ๊ฐ์ฒด์— ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๋Œ€์‹  ์—ฌ๋Ÿฌ ๊ฐ์ฒด๋“ค ๊ฐ„์— ์ƒํƒœ์˜ ๊ณตํ†ต ๋ถ€๋ถ„๋“ค์„ ๊ณต์œ ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” RAM์— ๋” ๋งŽ์€ ๊ฐ์ฒด๋“ค์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ž์ฃผ ๋ณ€ํ•˜๋Š” ์†์„ฑ(extrinsic)๊ณผ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ์†์„ฑ(intrinsic)์„ ๋ถ„๋ฆฌํ•˜๊ณ , ๋ณ€ํ•˜์ง€ ์•Š๋Š” ์†์„ฑ์„ ์บ์‹œํ•˜์—ฌ ์žฌ์‚ฌ์šฉํ•ด ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์ค„์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋™์ผํ•˜๊ฑฐ๋‚˜ ์œ ์‚ฌํ•œ ๊ฐ์ฒด๋“ค ์‚ฌ์ด์— ๊ฐ€๋Šฅํ•œ ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋กœ ๊ณต์œ ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜์—ฌ ์ตœ์ ํ™”๋ฅผ ๋…ธ๋ฆฌ๋Š” ๊ฒฝ๋Ÿ‰ ํŒจํ„ด์ด๋ผ๊ณ  ๋ถˆ๋ฆฝ๋‹ˆ๋‹ค. ๐Ÿ’ก ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์œผ๋กœ ๋ณธ ํ”Œ๋ผ์ด์›จ์ดํŠธ ํŒจํ„ดFlyweight : ๊ฒฝ๋Ÿ‰ ๊ฐ์ฒด๋ฅผ ๋ฌถ๋Š” ์ธํ„ฐํŽ˜์ด์Šค.Flyweight State : ํ”Œ๋ผ์ด์›จ์ด..

    Deep Dive Into Design Patterns - ์ฑ…์ž„ ์—ฐ์‡„ ํŒจํ„ด

    ๐Ÿ’ก ์ฑ…์ž„ ์—ฐ์‡„(Chain of Responsibility) ํŒจํ„ด์ด๋ž€?ํ•ธ๋“ค๋Ÿฌ๋“ค์˜ ์ฒด์ธ(์‚ฌ์Šฌ)์„ ๋”ฐ๋ผ ์š”์ฒญ์„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํ–‰๋™ ๋””์ž์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ํด๋ผ์ด์–ดํŠธ์˜ ์š”์ฒญ์— ๋Œ€ํ•œ ์„ธ์„ธํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๊ฐ€ ๋ชฝ๋•… ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ฒ˜๋ฆฌ ๊ฐ์ฒด๋“ค๋กœ ๋‚˜๋ˆ„๊ณ , ์ด๋“ค์„ ์‚ฌ์Šฌ(chain)์ฒ˜๋Ÿผ ์—ฐ๊ฒฐํ•ด ์ง‘ํ•ฉ ์•ˆ์—์„œ ์—ฐ์‡„์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ํ–‰๋™ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ฒ˜๋ฆฌ ๊ฐ์ฒด๋“ค์„ ํ•ธ๋“ค๋Ÿฌ(handler)๋ผ๊ณ  ๋ถ€๋ฅด๋Š”๋ฐ, ์š”์ฒญ์„ ๋ฐ›์œผ๋ฉด ๊ฐ ํ•ธ๋“ค๋Ÿฌ๋Š” ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํŒ๋‹จํ•˜๊ณ , ์—†์œผ๋ฉด ์ฒด์ธ์˜ ๋‹ค์Œ ํ•ธ๋“ค๋Ÿฌ๋กœ ์ฒ˜๋ฆฌ์— ๋Œ€ํ•œ ์ฑ…์ž„์„ ์ „๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ฒ˜๋ฆฌ์— ๋Œ€ํ•œ ์ฑ…์ž„์„ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ์ชฝ(sender)๊ณผ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š”(receiver) ์ชฝ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ฐ ๊ฐ์ฒด๋ฅผ ๋ถ€ํ’ˆ์œผ๋กœ ๋…๋ฆฝ์‹œํ‚ค๊ณ  ๊ฒฐํ•ฉ๋„๋ฅผ ๋Š์Šจํ•˜๊ฒŒ ๋งŒ๋“ค๋ฉฐ, ์ƒํ™ฉ์— ๋”ฐ๋ผ์„œ ์š”์ฒญ..

    Deep Dive Into Design Patterns - ํ”„๋ก์‹œ ํŒจํ„ด

    ๐Ÿ’ก ํ”„๋ก์‹œ ํŒจํ„ด์ด๋ž€?๋Œ€์ƒ ์›๋ณธ ๊ฐ์ฒด๋ฅผ ๋Œ€๋ฆฌํ•˜์—ฌ ๋Œ€์‹  ์ฒ˜๋ฆฌํ•˜๊ฒŒ ํ•จ์œผ๋กœ์จ ๋กœ์ง์˜ ํ๋ฆ„์„ ์ œ์–ดํ•˜๋Š” ํ–‰๋™ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. “ํ”„๋ก์‹œ”์˜ ์‚ฌ์ „์ ์ธ ์˜๋ฏธ์ธ ‘๋Œ€๋ฆฌ์ธ’์ฒ˜๋Ÿผ, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋Œ€์ƒ ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ์ค‘๊ฐ„์— ํ”„๋ก์‹œ(๋Œ€๋ฆฌ์ธ)์„ ๊ฑฐ์ณ์„œ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋Œ€์ƒ ๊ฐ์ฒด(Subject)์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์ง์ ‘ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ๋Œ€์ƒ ๊ฐ์ฒด์— ์ ‘๊ทผํ•˜๊ธฐ ์ „์— ํ”„๋ก์‹œ(Proxy) ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ ‘๊ทผํ•œ ํ›„ ์ถ”๊ฐ€์ ์ธ ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•œ๋’ค ์ ‘๊ทผํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ํ”„๋ก์‹œ๋Š” ์‹ค์ œ ๊ฐ์ฒด์— ์•ก์„ธ์Šคํ•˜์ง€ ์•Š๊ณ , ์ •์ƒ์  ๋˜๋Š” ๋น„์ •์ƒ์ ์ธ ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ๋” ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ’ก ํ”„๋ก์‹œ ํŒจํ„ด์„ ์“ฐ๋Š” ์ด์œ ํ”„๋ก์‹œ ํŒจํ„ด์€ ๋Œ€์ƒ ํด๋ž˜์Šค๊ฐ€ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ฑฐ๋‚˜ ์ธ์Šคํ„ด์Šคํ™” ํ•˜๊ธฐ์— ๋ฌด๊ฒ๊ฑฐ๋‚˜ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ๊ฐ€๋ฏธํ•˜๊ณ  ์‹ถ์€๋ฐ, ์›๋ณธ ๊ฐ์ฒด๋ฅผ ์ˆ˜์ •..

    Deep Dive Into Design Patterns - ์ค‘์žฌ์ž ํŒจํ„ด

    ๐Ÿ’ก ์ค‘์žฌ์ž(Mediator) ํŒจํ„ด์ด๋ž€? ๊ฐ์ฒด ๊ฐ„์˜ ํ˜ผ๋ž€์Šค๋Ÿฌ์šด ์˜์กด ๊ด€๊ณ„๋“ค์„ ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ํ–‰๋™ ๋””์ž์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ์ด ํŒจํ„ด์€ ๊ฐ์ฒด ๊ฐ„์˜ ์ง์ ‘ ํ†ต์‹ ์„ ์ œํ•œํ•˜๊ณ  ์ค‘์žฌ์ž ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด์„œ๋งŒ ํ˜‘๋ ฅํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ค‘์žฌ์ž ํŒจํ„ด์€ ๊ฐ ๊ฐ์ฒด๋“ค์˜ ๊ฐ•ํ•œ ์—ฐ๊ฒฐ(์ฐธ์กฐ)๋ฅผ ๋Š๊ณ , ๊ทธ ๋Œ€์‹  ์ปดํฌ๋„ŒํŠธ๋“ค์ด ํŠน์ˆ˜ ์ค‘์žฌ์ž ๊ฐ์ฒด๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ ์ ˆํ•œ ์ปดํฌ๋„ŒํŠธ๋“ค๋กœ ๋ฆฌ๋‹ค์ด๋ ‰์…˜ํ•˜๊ฒŒ๋” ํ•ฉ๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ์ปดํฌ๋„ŒํŠธ๋“ค์€ ๊ฐ„์ ‘์ ์œผ๋กœ ํ˜‘๋ ฅํ•˜๊ฒŒ ๋˜๊ณ , ์ˆ˜์‹ญ ๊ฐœ์˜ ๋™๋ฃŒ ์ปดํฌ๋„ŒํŠธ๋“ค๊ณผ ๊ฒฐํ•ฉ๋˜๋Š” ๋Œ€์‹  ๋‹จ์ผ ์ค‘์žฌ์ž ํด๋ž˜์Šค์—๋งŒ ์˜์กดํ•ฉ๋‹ˆ๋‹ค. โญ ์˜ต์„œ๋ฒ„ ํŒจํ„ด๊ณผ ์ค‘์žฌ์ž ํŒจํ„ด? ์˜ต์„œ๋ฒ„ ํŒจํ„ด์€ 1๊ฐœ์˜ ๋ฐœํ–‰์ž์— N๊ฐœ์˜ ๊ตฌ๋…์ž๊ฐ€ ์กด์žฌํ•˜์—ฌ ์˜ต์„œ๋ฒ„๊ฐ€ ๋ฐœํ–‰์„ ๋‹ด๋‹นํ•˜๊ณ  ์ค‘์žฌ์ž ํŒจํ„ด์€ M๊ฐœ์˜ ํผ๋ธ”๋ฆฌ์…”์™€ N๊ฐœ์˜ ๊ตฌ๋…์ž ์‚ฌ์ด์—์„œ 1๊ฐœ์˜ ์ค‘์žฌ์ž๋ฅผ ํ†ตํ•ด ํ†ต์‹ ํ•ฉ๋‹ˆ๋‹ค. ์˜ต์„œ๋ฒ„ ํŒจํ„ด์€ ์žฌ์‚ฌ์šฉ์„ฑ์€ ์ข‹์ง€๋งŒ ..

    Deep Dive Into Design Patterns - ์˜ต์„œ๋ฒ„ ํŒจํ„ด

    ๐Ÿ’ก ์˜ต์„œ๋ฒ„(Observer) ํŒจํ„ด์ด๋ž€? ๊ฐ์ฒด์— ๋ฐœ์ƒํ•˜๋Š” ๋ชจ๋“  ์ด๋ฒคํŠธ์— ๋Œ€ํ•˜์—ฌ ์˜ต์„œ๋ฒ„(๊ด€์ฐฐ์ž)๋“ค์—๊ฒŒ ์•Œ๋ฆฌ๊ณ , ์˜ต์„œ๋ฒ„๋“ค์€ ์•Œ๋ฆผ์„ ๋ฐ›์•„ ์กฐ์น˜๋ฅผ ์ทจํ•˜๋Š” ํ–‰๋™ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ์ผ๋ช… ๊ตฌ๋… ๋งค์ปค๋‹ˆ์ฆ˜์„ ๊ตฌํ˜„ํ•œ ํŒจํ„ด์œผ๋กœ, ๋‹ค๋ฅธ ๋””์ž์ธ ํŒจํ„ด๋“ค๊ณผ ๋‹ค๋ฅด๊ฒŒ ์ผ๋Œ€๋‹ค ์˜์กด์„ฑ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ์˜ต์„œ๋ฒ„ ํŒจํ„ด์˜ ์˜ˆ์‹œ๋กœ๋Š” MVC ํŒจํ„ด(Model, View, Controller)์ด ์žˆ์Šต๋‹ˆ๋‹ค. MVC์˜ Model๊ณผ View์˜ ๊ด€๊ณ„๋Š” Observer ํŒจํ„ด์˜ Subject ์—ญํ• ๊ณผ Observer ์—ญํ• ์˜ ๊ด€๊ณ„์— ๋Œ€์‘๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํ•˜๋‚˜์˜ Model์— ๋ณต์ˆ˜์˜ View๊ฐ€ ๋Œ€์‘ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ’ก ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์œผ๋กœ ๋ณธ ์˜ต์„œ๋ฒ„ ํŒจํ„ด Publisher(Subject) : ๊ด€์ฐฐ ๋‹นํ•˜๋Š” ๋Œ€์ƒ์œผ๋กœ, Subscriber(Observer)๋“ค์„ ๋ฆฌ์ŠคํŠธ๋กœ ๊ฐ–๊ณ  ์žˆ๋‹ค. (Aggrega..

    Deep Dive Into Design Patterns - ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด

    ๐Ÿ’ก ์‹ฑ๊ธ€ํ†ค(Singleton) ํŒจํ„ด์ด๋ž€? ํด๋ž˜์Šค์— ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•˜๋‚˜๋งŒ ์žˆ๋„๋ก ํ•˜๋ฉด์„œ ์ด ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์ „์—ญ ์ ‘๊ทผ(์•ก์„ธ์Šค) ์ง€์ ์„ ์ œ๊ณตํ•˜๋Š” ์ƒ์„ฑ ๋””์ž์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•ด, ๋‹จ ํ•˜๋‚˜์˜ ์œ ์ผํ•œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ ํŒจํ„ด์ด๋ฉฐ ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•„์š”ํ•  ๋•Œ ๋˜‘๊ฐ™์€ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค์ง€ ์•Š๊ณ  ๊ธฐ์กด์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์ ธ์™€ ํ™œ์šฉํ•˜๋Š” ๊ธฐ๋ฒ•์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ๋ณดํ†ต ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์ด ์ ์šฉ๋œ ๊ฐ์ฒด๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ๋Š” ๊ทธ ๊ฐ์ฒด๊ฐ€ ๋ฆฌ์†Œ์Šค๋ฅผ ๋งŽ์ด ์ฐจ์ง€ํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋Š” ๋ฌด๊ฑฐ์šด ํด๋ž˜์Šค์ผ๋•Œ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ๋ชจ๋“ˆ์„ ์˜ˆ๋กœ ๋“ค ์ˆ˜ ์žˆ๋Š”๋ฐ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘์†ํ•˜๋Š” ์ž‘์—…(I/O ๋ฐ”์šด๋“œ)์€ ๊ทธ ์ž์ฒด๋กœ ๋ฌด๊ฑฐ์šด ์ž‘์—…์— ์†ํ•˜๋ฉฐ ๋˜ํ•œ ํ•œ๋ฒˆ๋งŒ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋Œ๋ ค์“ฐ๋ฉด ๋˜์ง€ ๊ตณ์ด ์—ฌ๋Ÿฌ๋ฒˆ ์ƒ์„ฑํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๐Ÿ’ก ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์œผ๋กœ ๋ณธ..

    Deep Dive Into Design Patterns - ๋ธŒ๋ฆฌ์ง€ ํŒจํ„ด

    ๐Ÿ’ก ๋ธŒ๋ฆฌ์ง€ ํŒจํ„ด์ด๋ž€? ํฐ ํด๋ž˜์Šค ๋˜๋Š” ๋ฐ€์ ‘ํ•˜๊ฒŒ ๊ด€๋ จ๋œ ํด๋ž˜์Šค๋“ค์˜ ์ง‘ํ•ฉ์„ ๋‘ ๊ฐœ์˜ ๊ฐœ๋ณ„ ๊ณ„์ธต๊ตฌ์กฐ(์ถ”์ƒํ™” ๋ฐ ๊ตฌํ˜„)๋กœ ๋‚˜๋ˆˆ ํ›„ ๊ฐ๊ฐ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ตฌ์กฐ ๋””์ž์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ๐Ÿ’ก ๋ฌธ์ œ? Circle(์›) ๋ฐ Square(์ง์‚ฌ๊ฐํ˜•)๋ผ๋Š” ํ•œ ์Œ์˜ ์ž์‹ ํด๋ž˜์Šค๋“ค์ด ์žˆ๋Š” ๊ธฐํ•˜ํ•™์  Shape(๋ชจ์–‘) ํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ด…์‹œ๋‹ค. ์ด ํด๋ž˜์Šค ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ํ™•์žฅํ•˜์—ฌ ์ƒ‰์ƒ์„ ๋„์ž…ํ•˜๊ธฐ ์œ„ํ•ด Red(๋นจ๊ฐ„์ƒ‰) ๋ฐ Blue(ํŒŒ๋ž€์ƒ‰) ๋ชจ์–‘๋“ค์˜ ์ž์‹ ํด๋ž˜์Šค๋“ค์„ ๋งŒ๋“ค ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋ฏธ ๋‘ ๊ฐœ์˜ ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ Blue­Circle(ํŒŒ๋ž€์ƒ‰ ์›) ๋ฐ Red­Square(๋นจ๊ฐ„์ƒ‰ ์ง์‚ฌ๊ฐํ˜•)์™€ ๊ฐ™์€ ๋„ค ๊ฐ€์ง€์˜ ํด๋ž˜์Šค ์กฐํ•ฉ์„ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๋ชจ์–‘ ์œ ํ˜•๋“ค๊ณผ ์ƒ‰์ƒ ์œ ํ˜•๋“ค์„ ์ถ”๊ฐ€ํ•  ๋•Œ๋งˆ๋‹ค ๊ณ„์ธต ๊ตฌ์กฐ๋Š” ๊ธฐํ•˜๊ธ‰์ˆ˜์ ..

    Deep Dive Into Design Patterns - ์ปดํฌ์ง€ํŠธ ํŒจํ„ด

    ๐Ÿ’ก ์ปดํฌ์ง€ํŠธ(๋ณตํ•ฉ์ฒด) ํŒจํ„ด์ด๋ž€? ๊ฐ์ฒด๋“ค์„ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋“ค๋กœ ๊ตฌ์„ฑํ•œ ํ›„, ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋“ค์„ ๊ฐœ๋ณ„ ๊ฐ์ฒด๋“ค์ฒ˜๋Ÿผ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ตฌ์กฐ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ์ฆ‰, ๋ณตํ•ฉ ๊ฐ์ฒด(Composite)์™€ ๋‹จ์ผ ๊ฐ์ฒด(Leaf)๋ฅผ ๋™์ผํ•œ ์ปดํฌ๋„ŒํŠธ๋กœ ์ทจ๊ธ‰ํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฌด์—‡์ด ๋ณตํ•ฉ ๊ฐ์ฒด์ด๊ณ  ๋ฌด์—‡์ด ๋‹จ์ผ ๊ฐ์ฒด์ธ์ง€ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๊ณ ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ๋” ํ•˜๋Š” ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ๐Ÿ’ก ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์œผ๋กœ ๋ณธ ์ปดํฌ์ง€ํŠธ ํŒจํ„ด Component(์ธํ„ฐํŽ˜์ด์Šค) : Leaf์™€ Compsite ๋ฅผ ๋ฌถ๋Š” ๊ณตํ†ต์ ์ธ ์ƒ์œ„ ์ธํ„ฐํŽ˜์ด์Šค Composite : ๋ณตํ•ฉ ๊ฐ์ฒด๋กœ์„œ, Component ๊ตฌํ˜„์ฒด๋“ค์„ ๋‚ด๋ถ€ ๋ฆฌ์ŠคํŠธ๋กœ ๊ด€๋ฆฌ Leaf : ๋‹จ์ผ ๊ฐ์ฒด๋กœ์„œ, ํ•˜์œ„ ์š”์†Œ๊ฐ€ ์—†๋‹ค. Client : Component Interface๋ฅผ ํ†ตํ•ด ๋‹จ์ผ/๋ณตํ•ฉ ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋กœ ๋‹ค๋ฃฌ๋‹ค. ๋ณตํ•ฉ..

    Deep Dive Into Design Patterns - ํผ์‚ฌ๋“œ ํŒจํ„ด

    ๐Ÿ’ก ํผ์‚ฌ๋“œ ํŒจํ„ด์ด๋ž€? ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ, ํ”„๋ ˆ์ž„์›Œํฌ์— ๋Œ€ํ•œ, ๋˜๋Š” ๋‹ค๋ฅธ ํด๋ž˜์Šค๋“ค์˜ ๋ณต์žกํ•œ ์ง‘ํ•ฉ์— ๋Œ€ํ•œ ๋‹จ์ˆœํ™”๋œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ตฌ์กฐ์  ๋””์ž์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ฐ ํด๋ž˜์Šค์™€ ๋ฉ”์„œ๋“œ๋“ค์ด ์–ด๋–ค ๋ชฉ์ ์˜ ๋™์ž‘์ธ์ง€ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์›Œ ๋ฐ”๋กœ ๊ฐ€์ ธ๋‹ค ์“ฐ๊ธฐ์—๋Š” ๋‚œ์ด๋„๊ฐ€ ๋†’์„ ๋•Œ, ์ด์— ๋Œ€ํ•œ ์ ์ ˆํ•œ ๋„ค์ด๋ฐ๊ณผ ์ •๋ฆฌ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋กœ ํ•˜์—ฌ๊ธˆ ์‰ฝ๊ฒŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. โญ ํผ์‚ฌ๋“œ๋Š” ์›€์ง์ด๋Š” ๋ถ€๋ถ„์ด ๋งŽ์ด ํฌํ•จ๋œ ๋ณต์žกํ•œ ํ•˜์œ„ ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. ๐Ÿ’ก ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์œผ๋กœ ๋ณธ ํผ์‚ฌ๋“œ ํŒจํ„ด ํผ์‚ฌ๋“œ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•˜์œ„ ์‹œ์Šคํ…œ ๊ธฐ๋Šฅ๋“ค์˜ ํŠน์ • ๋ถ€๋ถ„์— ํŽธ๋ฆฌํ•˜๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ํผ์‚ฌ๋“œ๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์–ด๋””๋กœ ๋ณด๋‚ด์•ผ ํ•˜๋Š”์ง€์™€ ์›€์ง์ด๋Š” ๋ชจ๋“  ..

    Deep Dive Into Design Patterns - ์–ด๋Œ‘ํ„ฐ ํŒจํ„ด

    ๐Ÿ’ก ์–ด๋Œ‘ํ„ฐ ํŒจํ„ด์ด๋ž€? ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ€์ง„ ๊ฐ์ฒด๋“ค์ด ํ˜‘์—…ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ตฌ์กฐ์  ๋””์ž์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ๐Ÿ“Œ ๋ฌธ์ œ ์ƒํ™ฉ ์ฃผ์‹ ์‹œ์žฅ ๋ชจ๋‹ˆํ„ฐ๋ง ์•ฑ์„ ๋งŒ๋“ค๊ณ  ์žˆ๊ณ , ์ด ์•ฑ์€ ์—ฌ๋Ÿฌ ์†Œ์Šค์—์„œ ์ฃผ์‹ ๋ฐ์ดํ„ฐ๋ฅผ XML ํ˜•์‹์œผ๋กœ ๋‹ค์šด๋กœ๋“œํ•œ ํ›„ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด๊ธฐ ์ข‹์€ ์ฐจํŠธ๋“ค๊ณผ ๋‹ค์ด์–ด๊ทธ๋žจ๋“ค์„ ํ‘œ์‹œํ•œ๋‹ค๊ณ  ์ƒ์ƒํ•ด ๋ด…์‹œ๋‹ค. ์–ด๋Š ์‹œ์ ์— ๋‹น์‹ ์€ ํƒ€์‚ฌ์˜ ์Šค๋งˆํŠธ ๋ถ„์„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ฉํ•˜์—ฌ ๋‹น์‹ ์˜ ์•ฑ์„ ๊ฐœ์„ ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด ๋ถ„์„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” JSON ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ๋กœ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์•ฑ๊ณผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ์ƒํ™ฉ์ž…๋‹ˆ๋‹ค. ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ XML๊ณผ ์ž‘๋™ํ•˜๋„๋ก ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, ๊ทธ๋Ÿฌ๋ฉด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์˜์กดํ•˜๋Š” ์ผ๋ถ€ ๊ธฐ์กด ์ฝ”๋“œ๊ฐ€ ์†์ƒ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ ์ฒ˜์Œ๋ถ€ํ„ฐ ํƒ€์‚ฌ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์†Œ์Šค ์ฝ”๋“œ์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜์—ฌ..

    Deep Dive Into Design Patterns - ๋””์ž์ธ ํŒจํ„ด์˜ ๊ฐœ์š”

    ๐Ÿ’ก ํŒจํ„ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ๐Ÿ“Œ ์ƒ์„ฑ ํŒจํ„ด Deep Dive Into Design Patterns - ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด๐Ÿ’ก ์‹ฑ๊ธ€ํ†ค(Singleton) ํŒจํ„ด์ด๋ž€? ํด๋ž˜์Šค์— ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•˜๋‚˜๋งŒ ์žˆ๋„๋ก ํ•˜๋ฉด์„œ ์ด ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์ „์—ญ ์ ‘๊ทผ(์•ก์„ธ์Šค) ์ง€์ ์„ ์ œ๊ณตํ•˜๋Š” ์ƒ์„ฑ ๋””์ž์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•ด, ๋‹จ ํ•˜๋‚˜์˜ ์œ ์ผํ•œ ๊ฐ์ฒด๋ฅผeasyhomputer.tistory.com ๐Ÿ“Œ ๊ตฌ์กฐ ํŒจํ„ด Deep Dive Into Design Patterns - ์–ด๋Œ‘ํ„ฐ ํŒจํ„ด๐Ÿ’ก ์–ด๋Œ‘ํ„ฐ ํŒจํ„ด์ด๋ž€? ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ€์ง„ ๊ฐ์ฒด๋“ค์ด ํ˜‘์—…ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ตฌ์กฐ์  ๋””์ž์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ๐Ÿ“Œ ๋ฌธ์ œ ์ƒํ™ฉ ์ฃผ์‹ ์‹œ์žฅ ๋ชจ๋‹ˆํ„ฐ๋ง ์•ฑ์„ ๋งŒ๋“ค๊ณ  ์žˆ๊ณ , ์ด ์•ฑ์€ ์—ฌ๋Ÿฌ ์†Œ์Šค์—easyhomputer.tistory.com Deep Dive Into Desig..