Deep Dive Into Design Patterns - ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด

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

    Deep Dive Into Design Patterns - ์ปค๋งจ๋“œ ํŒจํ„ด

    ๐Ÿ’ก ์ปค๋งจ๋“œ(Command) ํŒจํ„ด์ด๋ž€?์š”์ฒญ(๊ธฐ๋Šฅ)์„ ์บก์Šํ™”ํ•˜์—ฌ ์š”์ฒญ์— ๋Œ€ํ•œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ๊ฐ์ฒดํ™”ํ•˜๋Š” ํ–‰๋™ ๋””์ž์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ์š”์ฒญ์— ๋Œ€ํ•œ ์ •๋ณด๋กœ๋Š” ๋ฉ”์„œ๋“œ ์ด๋ฆ„, ๋งค๊ฐœ๋ณ€์ˆ˜ ๋“ฑ์ด ์žˆ์œผ๋ฉฐ, ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๋‚ธ ์š”์ฒญ์„ ์ €์žฅ, ๋กœ๊น…, ๋˜๋Š” ์ทจ์†Œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ’ก ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์œผ๋กœ ๋ณธ ์ปค๋งจ๋“œ ํŒจํ„ด๋ฐœ๋™์ž(Invoker) : ์š”์ฒญ๋“ค์„ ์‹œ์ž‘ํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋Š” ํด๋ž˜์Šค๋กœ, ์ˆ˜์‹ ์ž ๋Œ€์‹  ์ปค๋งจ๋“œ ๊ฐ์ฒด๋ฅผ ์ž‘๋™์‹œํ‚ด์œผ๋กœ์จ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. ๋˜, ์š”์ฒญ์— ๋Œ€ํ•œ ๊ธฐ๋ก์„ ๋‚จ๊ธธ ์ˆ˜ ์žˆ๊ณ , ํ•œ ๋ฐœ๋™์ž ๊ฐ์ฒด์— ๋‹ค์ˆ˜์˜ ์ปค๋งจ๋“œ ๊ฐ์ฒด๊ฐ€ ์ „๋‹ฌ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.Command Interface : ์ผ๋ฐ˜์ ์œผ๋กœ ์ปค๋งจ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋‹จ์ผ ๋ฉ”์„œ๋“œ๋งŒ์„ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค.Concrete Command : ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ์š”์ฒญ์„ ๊ตฌํ˜„. ์ž์ฒด์ ์œผ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์„œ๋Š” ์•ˆ ๋˜๋ฉฐ, ๋Œ€์‹  ..

    Deep Dive Into Design Patterns - ์ „๋žต ํŒจํ„ด

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

    Deep Dive Into Design Patterns - ์ƒํƒœ ํŒจํ„ด

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

    Deep Dive Into Design Patterns - ํ…œํ”Œ๋ฆฟ ๋ฉ”์„œ๋“œ ํŒจํ„ด

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

    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 ๋ฐ”์šด๋“œ)์€ ๊ทธ ์ž์ฒด๋กœ ๋ฌด๊ฑฐ์šด ์ž‘์—…์— ์†ํ•˜๋ฉฐ ๋˜ํ•œ ํ•œ๋ฒˆ๋งŒ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋Œ๋ ค์“ฐ๋ฉด ๋˜์ง€ ๊ตณ์ด ์—ฌ๋Ÿฌ๋ฒˆ ์ƒ์„ฑํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๐Ÿ’ก ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์œผ๋กœ ๋ณธ..