๋ฐ˜์‘ํ˜•

๐ŸŽฐ Design Pattern 12

Proxy Pattern | ํ”„๋ก์‹œ ํŒจํ„ด

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

Flyweight Pattern | ํ”Œ๋ผ์ด์›จ์ดํŠธ ํŒจํ„ด

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

Facade Pattern | ํผ์‚ฌ๋“œ ํŒจํ„ด

๋ชฉ์ฐจ ์–ด๋–ค ์ƒํ™ฉ์—์„œ ์“ฐ์ผ๊นŒ? ์ผ์ƒ์ƒํ™œ์—์„œ ์ „๋“ฑ์„ ํ‚ฌ๋•Œ, ์šฐ๋ฆฌ๋Š” ์Šค์œ„์น˜ ํ•˜๋‚˜๋งŒ ๋ˆ„๋ฅด๋ฉด ๋œ๋‹ค ์Šค์œ„์น˜๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ ์–ด๋–ค ๊ณผ์ •์„ ๊ฑฐ์ณ์„œ ์ „๋“ฑ์ด ์ผœ์ง€๋Š”์ง€ ํด๋ผ์ด์–ธํŠธ ์ž…์žฅ์—์„œ ์•Œ ํ•„์š”๊ฐ€ ์žˆ์„๊นŒ? ์ „ํ˜€์—†๋‹ค ํผ์‚ฌ๋“œ ํŒจํ„ด๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋‹ค! ํผ์‚ฌ๋“œ ํŒจํ„ด์ด๋ž€? ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ๋ณต์žกํ•œ ์„œ๋ธŒ ์‹œ์Šคํ…œ ์˜์กด์„ฑ์„ ๊ฐ„๋‹จํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ถ”์ƒํ™” ํ•˜๋Š” ํŒจํ„ด์ด๋‹ค ํผ์‚ฌ๋“œ ํŒจํ„ด์€ ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ—ฌํผ ์—ญํ• ์ผ ๋ฟ์ด์ง€, ์„œ๋ธŒ์‹œ์Šคํ…œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ˆจ๊ธฐ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค! ๋˜ํ•œ ํผ์‚ฌ๋“œํŒจํ„ด์€ ์„œ๋ธŒ์‹œ์Šคํ…œ์„ ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ์‚ฌ์šฉํ•  ๋•Œ ์ ์šฉํ•˜๋ฉด ์ด์ ์ด ์žˆ๋Š” ํŒจํ„ด์ด๋‹ค! ์žฅ์  - ์„œ๋ธŒ ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ์˜์กด์„ฑ์„ ํ•œ๊ณณ์œผ๋กœ ๋ชจ์„ ์ˆ˜ ์žˆ๋‹ค - ์„œ๋ธŒ ์‹œ์Šคํ…œ์„ ๊ฐ ์—ญํ• ์— ๋งž๊ฒŒ ๋ถ„๋ฆฌํ•˜์—ฌ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค ๋‹จ์  - ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์žˆ๋˜ ์˜์กด์„ฑ์ด ๊ทธ๋Œ€๋กœ ํผ์‚ฌ๋“œ ํด๋ž˜์Šค๋กœ ์˜ฎ๊ฒจ..

Decorator Pattern | ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด

๋ชฉ์ฐจ ์–ด๋–ค ์ƒํ™ฉ์—์„œ ์“ฐ์ผ๊นŒ? ๋Œ“๊ธ€ ์ž‘์„ฑ ์„œ๋น„์Šค๋Š” ํ•„ํ„ฐ๋ฅผ ๋ฐ›์•„์„œ ๋™์ž‘ํ•œ๋‹ค. ์ด๋•Œ ๊ณต๋ฐฑ์„ ์ž๋ฅด๋Š” ํ•„ํ„ฐ๊ฐ€ ์žˆ์„ ๊ฒƒ์ด๊ณ , ์–ด๋–ค ๋ฌธ์ž์—ด์„ ์ž๋ฅด๋Š” ํ•„ํ„ฐ๊ฐ€ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ๋ฌธ์ž์—ด์„ ์ž๋ฅด๋Š” ํ•„ํ„ฐ๋Š” new Client(new SpamFilter()); ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ๊ณต๋ฐฑ์„ ์ž๋ฅด๋Š” ํ•„ํ„ฐ๋Š” new Client(new TrimFilter()); ๋กœ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๋ฌธ์ž์—ด๊ณผ ๊ณต๋ฐฑ ๋‘˜๋‹ค ์ž๋ฅด๋Š” ํ•„ํ„ฐ๋Š” ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„๊นŒ?? SpamAndTrimFilter? ์—ฌ๊ธฐ์„œ ํ•„ํ„ฐ์˜ ๊ธฐ๋Šฅ์ด ๋” ์ถ”๊ฐ€๋œ๋‹ค๋ฉด..? SpamAndTrimAnd...And....Filter..? ๊ฐ ํ•„ํ„ฐ๋“ค์˜ ๊ธฐ๋Šฅ์€ ๊ทธ๋Œ€๋กœ ๋†”๋‘๋ฉด์„œ, ๋Ÿฐํƒ€์ž„ ์‹œ์— ์ด ํ•„ํ„ฐ๋“ค์ด ์กฐํ•ฉ๋˜๋ฉฐ ๋™์ž‘ํ•˜๊ฒŒ ํ•  ์ˆ˜๋Š” ์—†์„๊นŒ?? ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด์ด๋ž€? ๋Ÿฐํƒ€์ž„์—์„œ ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ๋ถ€..

Composite Pattern | ์ปดํฌ์ง“ ํŒจํ„ด

๋ชฉ์ฐจ ์–ด๋–ค ์ƒํ™ฉ์—์„œ ์“ฐ์ผ๊นŒ? ๊ฒŒ์ž„ ์บ๋ฆญํ„ฐ๋Š” ๊ฐ€๋ฐฉ์— ๋„๋ž€๊ฒ€๊ณผ ์ฒด๋ ฅ๋ฌผ๋žต์„ ๊ฐ€์ง€๊ณ ์žˆ๋‹ค ๋ณดํ†ต ์•„์ดํ…œ์— ๋งˆ์šฐ์Šค๋ฅผ ์˜ฌ๋ฆฌ๋ฉด ๊ฐ€๊ฒฉ์ด ์ถœ๋ ฅ๋˜๋Š”๋ฐ, ๋„๋ž€๊ฒ€ ๊ฐ€๊ฒฉ์„ ์ถœ๋ ฅํ•˜๋Š”๊ฒƒ์ด๋‚˜, ๊ฐ€๋ฐฉ์˜ ๋ชจ๋“  ์•„์ดํ…œ์˜ ๊ฐ€๊ฒฉ์„ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์ด๋‚˜ ๊ฒŒ์ž„ ์บ๋ฆญํ„ฐ ์ž…์žฅ์—์„  ๋™์ผํ•˜๊ฒŒ ๊ฐ€๊ฒฉ์„ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ฐ€๋ฐฉ์€ ์•„์ดํ…œ์„ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ˆ ๊ฐ€๋ฐฉ์—.. ๊ฐ€๊ฒฉ ์ถœ๋ ฅ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์–ด์•ผํ• ๊นŒ?? ์•„๋‹ˆ๋ฉด ์•„์ดํ…œ์— ๊ฐ€๊ฒฉ์ถœ๋ ฅ ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ๊ฐ€๋ฐฉ์˜ ๋ชจ๋“  ์•„์ดํ…œ ๊ฐ€๊ฒฉ์„ ์ถœ๋ ฅํ•  ๋• ์•„์ดํ…œ ์ „์ฒด๋ฅผ ์ˆœํšŒํ•ด์•ผํ• ๊นŒ??? ์ปดํฌ์ง“ ํŒจํ„ด์ด๋ž€? ๊ทธ๋ฃน ์ „์ฒด์™€ ๊ฐœ๋ณ„ ๊ฐ์ฒด๋ฅผ ๋™์ผํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํŒจํ„ด์ด๋‹ค. ํด๋ผ์ด์–ธํŠธ ์ž…์žฅ์—์„œ ์ „์ฒด๋‚˜ ๋ถ€๋ถ„์ด๋‚˜ ๋™์ผํ•œ ์ปดํฌ๋„ŒํŠธ๋กœ ์ธ์‹ํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•œ๋‹ค. ๋‹ค์‹œ๋งํ•ด ์ผ๊ด„์ ์ธ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ฒŒ๋” ๋œ๋‹ค! * ํŠธ๋ฆฌ๊ตฌ์กฐ์ด์–ด์•ผ ํ•˜๋Š” ์ œ์•ฝ์‚ฌํ•ญ์ด ์žˆ๋‹ค! ์žฅ์  - ๋ณต์žกํ•œ ..

Bridge Pattern | ๋ธŒ๋ฆฟ์ง€ ํŒจํ„ด

๋ชฉ์ฐจ ์–ด๋–ค ์ƒํ™ฉ์—์„œ ์“ฐ์ผ๊นŒ? ๊ฒŒ์ž„ ์บ๋ฆญํ„ฐ์˜ ์†์„ฑ์„ ์ƒ๊ฐํ•ด๋ณด์ž ์Šคํ‚จ๋„ ์žˆ๊ณ , ์บ๋ฆญํ„ฐ ๊ณ ์œ  ์Šคํ‚ฌ๋„ ์žˆ๊ณ , ๊ณตํ†ต์ ์ธ ์บ๋ฆญํ„ฐ ์Šคํ‚ฌ๋„ ์žˆ๊ณ ... ์ด ๊ธฐ๋Šฅ๊ณผ ๊ตฌํ˜„๋“ค์„ ๋ชจ๋‘ ์ธํ„ฐํŽ˜์ด์Šค๋‚˜ ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ํ™•์žฅํ•ด์„œ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„๊นŒ? ์•„๋งˆ implments ๋’ค์— ๋ถ™๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋“ค์ด 20๊ฐœ๊ฐ€ ๋„˜์–ด๊ฐˆ์ˆ˜๋„์žˆ๋‹ค ใ…Žใ…Ž ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฐ”๋ผ๋ณด๋Š”๊ฑด '์บ๋ฆญํ„ฐ'(์ถ”์ƒํ™”)์ด๊ณ  '์บ๋ฆญํ„ฐ'์˜ ๊ตฌ์ฒด์ ์ธ ์Šคํ‚จ๊ณผ ์Šคํ‚ฌ(๊ตฌํ˜„์ฒด๋“ค)์„ ์—ฐ๊ฒฐํ•ด์„œ ์‚ฌ์šฉํ•˜์ž! ๋‹ค๋ฅธ ์˜ˆ์‹œ๋กœ, JDBC๋“œ๋ผ์ด๋ฒ„๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ DriverManager.getConnection, Statement.execute(SQL), connection.prepareStatement(SQL).. ๋“ฑ์ด ๋ชจ๋‘ ์ถ”์ƒํ™”๋œ ๊ธฐ๋Šฅ์ด๊ณ  Class.forName("DriverName")์—์„œ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„์ฒด๋“ค์„ ๊ฐ€์ ธ์˜ค..

Adapter Pattern | ์–ด๋Œ‘ํ„ฐํŒจํ„ด

๋ชฉ์ฐจ ์–ด๋–ค ์ƒํ™ฉ์—์„œ ์“ฐ์ผ๊นŒ? ํ•ญ์ƒ ๋‚˜์˜ค๋Š” ์˜ˆ์‹œ.. ํ•œ๊ตญ ์ „๊ธฐ์ œํ’ˆ 220V์™€ ๋ฏธ๊ตญ ์ „๊ธฐ์ œํ’ˆ 110V ์‚ฌ์ด์— ๊ฝ‚์•„์„œ ์ „์••์„ ๋งž์ถ”์–ด์ฃผ๋Š” ๊ฒƒ์„ ์–ด๋Œ‘ํ„ฐ๋ผ๊ณ ํ•œ๋‹ค! ์†Œํ”„ํŠธ์›จ์–ด์—์„œ๋„ ๋™์ผํ•˜๊ฒŒ, ์„œ๋กœ ๋‹ค๋ฅธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งž์ถ”์–ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. ์–ด๋Œ‘ํ„ฐ ํŒจํ„ด์ด๋ž€? ๊ทœ๊ฒฉ์— ๋งž์ง€ ์•Š๋Š” ๊ฐ์ฒด๋ฅผ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌํ˜„์ฒด๋กœ ๋ฐ”๊พธ์–ด์ฃผ๋Š” ํŒจํ„ด์ด๋‹ค. ์žฅ์  - ๊ธฐ์กด ์ฝ”๋“œ(Account)๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ์›ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„์ฒด(AccountUserDetails)๋ฅผ ๋งŒ๋“ค์–ด ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹จ์  - ์ƒˆ ํด๋ž˜์Šค(AccountUserDetails)๊ฐ€ ์ƒ๊ฒจ ๋ณต์žก๋„๊ฐ€ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ตฌํ˜„๋ฐฉ๋ฒ• ๊ธฐ์กด์ฝ”๋“œ Security์—์„œ ์ œ๊ณตํ•˜๋Š” LoginHandler. Security ํŒจํ‚ค์ง€์— ์žˆ๋Š” ์ฝ”๋“œ๋Š” ๊ฑด๋“œ๋ฆด ์ˆ˜ ์—†๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค!!..

Prototype Pattern | ํ”„๋กœํ† ํƒ€์ž… ํŒจํ„ด

๋ชฉ์ฐจ ์–ด๋–ค ์ƒํ™ฉ์—์„œ ์“ฐ์ผ๊นŒ? DB์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์™€ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, ๋˜๋Š” ๋„คํŠธ์›Œํฌ๋ฅผ ๊ฑฐ์ณ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์‹œ๊ฐ„๋„ ์˜ค๋ž˜๊ฑธ๋ฆฌ๊ณ  ๋ฆฌ์†Œ์Šค๋„ ๋งŽ์ด ์†Œ๋ชจํ•˜๊ฒŒ๋œ๋‹ค. ๊ธฐ์กด์— ์ด๋ฏธ DB์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ ์ธ์Šคํ„ด์Šค๊ฐ€ ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ์ธ์Šคํ„ด์Šค๋ฅผ ๋ณต์‚ฌํ•˜๊ณ , ๊ฐ’๋งŒ ์กฐ๊ธˆ ์ˆ˜์ •ํ•ด์„œ ์‚ฌ์šฉํ•ด๋„ ๋˜์ง€ ์•Š์„๊นŒ?! ํ”„๋กœํ† ํƒ€์ž… ํŒจํ„ด์ด๋ž€? ๊ธฐ์กด ์ธ์Šคํ„ด์Šค๋ฅผ ๋ณต์ œํ•˜์—ฌ ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“œ๋Š” ํŒจํ„ด์ด๋‹ค. ๊ธฐ์กด์˜ ๊ฐ์ฒด๋ฅผ ์‘์šฉํ•ด์„œ ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค ๋•Œ ํ™œ์šฉํ•œ๋‹ค ์žฅ์  - ๋ณต์žกํ•œ ๊ฐ์ฒด ๋งŒ๋“œ๋Š” ๊ณผ์ •์„ ์ˆจ๊ธธ ์ˆ˜ ์žˆ๋‹ค. - ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ๋ณด๋‹ค ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ๋‹ค. ๋‹จ์  - ์ˆœํ™˜์ฐธ์กฐ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ, ๋ณต์ œ๊ณผ์ • ์ž์ฒด๊ฐ€ ๋ณต์žกํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ตฌํ˜„๋ฐฉ๋ฒ• ๊ธฐ์กด์ฝ”๋“œ GithubRepository repository = new GithubR..

Abstract Factory | ์ถ”์ƒ ํŒฉํ† ๋ฆฌ ํŒจํ„ด

๋ชฉ์ฐจ ์–ด๋–ค ์ƒํ™ฉ์—์„œ ์“ฐ์ผ๊นŒ? ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ ํŒจํ„ด์—์„œ Ship์˜ˆ์ œ๋ฅผ ์‚ดํŽด๋ณด์•˜๋‹ค. Ship์— Anchor์™€ Wheel ๋ถ€ํ’ˆ์„ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ ํ•œ๋‹ค ์ด๋•Œ, Anchor์™€ Wheel์€ ์„œ๋กœ ์ง์ง€์–ด์ง€๋Š” ๋ถ€ํ’ˆ์ด๋‹ค! Anchor - Wheel / AnchorPro - WheelPro / AnchorV2 - WheelV2 ๋กœ ์ง์ง€์–ด์ ธ์„œ ์ถ”๊ฐ€๋˜์–ด์•ผํ•œ๋‹ค ๊ธฐ์กด ์ฝ”๋“œ์˜ ๋ณ€๊ฒฝ์„ ์ตœ์†Œํ™”ํ•˜์—ฌ ๋ถ€ํ’ˆ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ์—†์„๊นŒ? ์ถ”์ƒ ํŒฉํ† ๋ฆฌ ํŒจํ„ด์ด๋ž€? ์—ฌ๋Ÿฌ ๊ด€๋ จ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“œ๋Š” ํŒจํ„ด์ด๋‹ค ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ ํŒจํ„ด๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ, ๊ตฌ์ฒด์ ์œผ๋กœ ์–ด๋–ค ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€ ๊ฐ์ถœ ์ˆ˜ ์žˆ๊ณ  ์„œ๋กœ ์œ ์‚ฌํ•œ ๊ฐ์ฒด๊ฐ€ ์กฐํ•ฉ๋˜์–ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ ํŒฉํ† ๋ฆฌ๋ฅผ ์ธํ„ฐํŽ˜์ด์Šคํ™” ํ•˜์—ฌ WhiteAnchor - BlackWheel์˜ ์กฐํ•ฉ์„ ๋ฐฉ์ง€..

Factory Method Pattern | ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ ํŒจํ„ด

๋ชฉ์ฐจ ์–ด๋–ค ์ƒํ™ฉ์—์„œ ์“ฐ์ผ๊นŒ? ํ•˜์–€๋ฐฐ๋Š” ํ•˜์–€์ƒ‰๊น”์—, ํ•˜์–€๋งˆํฌ์—, whiteship์ด๋ผ๋Š” ์ด๋ฆ„์„ ๊ฐ€์ง€๊ณ ์žˆ๋‹ค. ๊ฒ€์ •๋ฐฐ๋Š” ๊ฒ€์ •์ƒ‰๊น”์—, ๊ฒ€์ •๋งˆํฌ์—, blackship์ด๋ผ๋Š” ์ด๋ฆ„์„ ๊ฐ€์ง€๊ณ ์žˆ๋‹ค. ๋…ธ๋ž€๋ฐฐ๋Š” ํ•˜์–€๋ฐฐ, ๊ฒ€์ •๋ฐฐ์™€ ๋™์ผํ•œ ์ž‘์—…์— ๋‚ด์šฉ๋ฌผ๋งŒ ๋ฐ”๊พธ์–ด ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ๋ฐฐ๋ฅผ ๋งŒ๋“œ๋Š” ์ฝ”๋“œ๊ฐ€ if๋ฌธ์œผ๋กœ ๋ถ„๊ธฐ์ฒ˜๋ฆฌ ๋˜์–ด์žˆ์œผ๋ฉด ์ดˆ๋ก๋ฐฐ๋ฅผ ๋งŒ๋“ค์–ด์•ผํ•  ๊ฒฝ์šฐ ๋ถ„๊ธฐ์ฒ˜๋ฆฌ๊ฐ€ 4๊ฐœ๋‚˜ ์ด๋ฃจ์–ด์ง€๊ฒŒ๋˜์–ด ๊น”๋”ํ•œ ์ฝ”๋“œ๊ฐ€ ์•„๋‹๊ฒƒ์ด๊ณ , ๊ณ„์† ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ด์•ผํ•˜๋‹ˆ ํ™•์žฅ์— ์œ ์—ฐํ•˜์ง€๋„ ์•Š๊ฒŒ๋œ๋‹ค. ๋ฐฐ์˜ ๊ณตํ†ต์ ์ธ color, mark, name์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ํŒฉํ† ๋ฆฌ๋ฅผ ์ง€์ •ํ•˜๊ณ , ํŒฉํ† ๋ฆฌ๋กœ๋ถ€ํ„ฐ ํ•˜์–€๋ฐฐ, ๊ฒ€์ •๋ฐฐ, ๋…ธ๋ž€๋ฐฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋ฉด ์–ด๋–จ๊นŒ?? ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ ํŒจํ„ด์ด๋ž€? ๊ตฌ์ฒด์ ์œผ๋กœ ์–ด๋–ค ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค์ง€๋Š” ์„œ๋ธŒ ํด๋ž˜์Šค๊ฐ€ ์ •ํ•˜๊ฒŒํ•˜๋Š” ํŒจํ„ด์ด๋‹ค ์žฅ์  - ํ™•์žฅ์— ..

๋ฐ˜์‘ํ˜•