๐Ÿ“š Study/๋””์ž์ธ ํŒจํ„ด

Prototype ํŒจํ„ด๐Ÿ’ก ํด๋ž˜์Šค์—์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋Œ€์‹  ์ธ์Šคํ„ด์Šค๋กœ๋ถ€ํ„ฐ ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑ์ข…๋ฅ˜๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์•„ ํด๋ž˜์Šค๋กœ ์ •๋ฆฌํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์ทจ๊ธ‰ํ•  ์˜ค๋ธŒ์ ํŠธ์˜ ์ข…๋ฅ˜๊ฐ€ ๋งŽ์•„์„œ ์†Œ์Šค ํŒŒ์ผ์„ ๋งŽ์ด ์ž‘์„ฑํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ์ด ์–ด๋ ค์šด ๊ฒฝ์šฐ๋ณต์žกํ•œ ๊ณผ์ •์„ ๊ฑฐ์ณ ๋งŒ๋“ค์–ด์ง€๋Š” ๊ฒƒ์œผ๋กœ ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ๋งŒ๋“ค๊ธฐ๊ฐ€ ๋งค์šฐ ์–ด๋ ค์šด ๊ฒฝ์šฐ์‚ฌ์šฉ์ž ์กฐ์ž‘์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ์ธ์Šคํ„ด์Šค์™€ ๊ฐ™์€ ๊ฒƒ์„ ๋‹ค์‹œ ๋งŒ๋“ค๊ณ  ์‹ถ์€ ๊ฒฝ์šฐโœ… ํ˜„์žฌ ๋งŒ๋“  ์ธ์Šคํ„ด์Šค๋ฅผ ์ผ๋‹จ ์ €์žฅํ•ด๋‘๊ณ  ๋งŒ๋“ค๊ณ  ์‹ถ์„ ๋•Œ ์ด๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ์ƒ์„ฑํ”„๋ ˆ์ž„์›Œํฌ์™€ ์ƒ์„ฑํ•˜๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํŠน์ • ํด๋ž˜์Šค์— ์˜์กดํ•˜์ง€ ์•Š๊ฒŒ ํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐโœ… ๋ฏธ๋ฆฌ ์›ํ˜•์ด ๋  ์ธ์Šคํ„ด์Šค๋ฅผ ๋“ฑ๋กํ•ด๋‘๊ณ , ๋“ฑ๋ก๋œ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ์ƒ์„ฑ Prototype(์›ํ˜•)์ธ์Šคํ„ด์Šค๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ..
Singleton ํŒจํ„ด ๐Ÿ’ก ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•˜๋‚˜๋งŒ ์กด์žฌํ•˜๋Š” ๊ฒƒ์„ ๋ณด์ฆํ•˜๋Š” ํŒจํ„ด ๋“ฑ์žฅ์ธ๋ฌผ Singleton ์œ ์ผํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ ์–ป๊ธฐ ์œ„ํ•œ `static` ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์ง → ํ•ญ์ƒ ๊ฐ™์€ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ˜ํ™˜ public class Singleton { private static Singleton singleton = new Singleton(); private Singleton() { System.out.println("์ธ์Šคํ„ด์Šค ์ƒ์„ฑ") } public stgatic Singleton getInstance() { return singletone; } } Singleton ํด๋ž˜์Šค ๋กœ๋“œํ•  ๋•Œ ์ดˆ๊ธฐํ™” ์ง„ํ–‰ `private` ์ƒ์„ฑ์ž : ์™ธ๋ถ€์—์„œ ์ƒ์„ฑ์ž ํ˜ธ์ถœ์„ ๊ธˆ์ง€ํ•˜๊ธฐ ์œ„ํ•จ `getInstance()`: ์œ ์ผํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ ์–ป๋Š” ๋ฉ”..
Factory Method Factory Method ํŒจํ„ด ๐Ÿ’ก ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ณต์žฅ์€ Template Method ํŒจํ„ด์œผ๋กœ ๊ตฌ์„ฑํ•œ ๊ฒƒ ์ธ์Šคํ„ด์Šค์˜ ์ƒ์„ฑ ๋ฐฉ๋ฒ•์„ ์ƒ์œ„ ํด๋ž˜์Šค์—์„œ ๊ฒฐ์ •ํ•˜๋˜, ๊ตฌ์ฒด์ ์ธ ํด๋ž˜์Šค ์ด๋ฆ„๊นŒ์ง€ ๊ฒฐ์ •ํ•˜์ง€ ์•Š์Œ ๊ตฌ์ฒด์ ์ธ ์‚ด์€ ๋ชจ๋‘ ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ๊ฒฐ์ •! ⇒ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ์„ ์œ„ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ์‹ค์ œ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Œ ๋“ฑ์žฅ์ธ๋ฌผ Product (์ œํ’ˆ) ํ”„๋ ˆ์ž„์›Œํฌ package ์ƒ์„ฑ๋˜๋Š” ์ธ์Šคํ„ด์Šค๊ฐ€ ๊ฐ€์ ธ์•ผ ํ•  ์ธํ„ฐํŽ˜์ด์Šค(API)๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์ถ”์ƒ ํด๋ž˜์Šค ๊ตฌ์ฒด์ ์ธ ๋‚ด์šฉ์€ ํ•˜์œ„ ํด๋ž˜์Šค `ConcreteProduct` ์—์„œ ๊ฒฐ์ • package framework; public abstract class Product { public abstract void use(); } Creat..
Template Method ํŒจํ„ด ๐Ÿ’ก ์ƒ์œ„ ํด๋ž˜์Šค์—์„œ ์ฒ˜๋ฆฌ์˜ ๋ผˆ๋Œ€๋ฅผ ๊ฒฐ์ •ํ•˜๊ณ  ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ๊ตฌ์ฒด์ ์ธ ๋‚ด์šฉ์„ ๊ฒฐ์ • ๋“ฑ์žฅ์ธ๋ฌผ `AbstractClass` (์ถ”์ƒ ํด๋ž˜์Šค) ํ…œํ”Œ๋ฆฟ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉฐ, ํ…œํ”Œ๋ฆฟ ๋ฉ”์†Œ๋“œ์—์„œ ์‚ฌ์šฉํ•  ์ถ”์ƒ ๋ฉ”์†Œ๋“œ๋ฅผ ์„ ์–ธ ์ถ”์ƒ ๋ฉ”์†Œ๋“œ๋Š” ํ•˜์œ„ ํด๋ž˜์Šค์ธ `ConcreteClass` ์—์„œ ๊ตฌํ˜„ public abstract class AbstractDisplay { // ํ•˜์œ„ ํด๋ž˜์Šค์— ๊ตฌํ˜„์„ ๋งก๊ธฐ๋Š” ์ถ”์ƒ ๋ฉ”์†Œ๋“œ public abstract void open(); public abstract void print(); public abstract void close(); // AbstractDisplay์—์„œ ๊ตฌํ˜„ํ•˜๋Š” ๋ฉ”์†Œ๋“œ -> ํ…œํ”Œ๋ฆฟ ๋ฉ”์†Œ๋“œ public final void display() { ..
์ ์ด
'๐Ÿ“š Study/๋””์ž์ธ ํŒจํ„ด' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก