๐ŸŒป JAVA/๋””์ž์ธ ํŒจํ„ด

๐ŸŒป JAVA/๋””์ž์ธ ํŒจํ„ด

Factory Pattern (feat. ์ถ”์ƒ ํŒฉํ† ๋ฆฌ, ํŒฉํ† ๋ฆฌ ๋ฉ”์†Œ๋“œ)

1. ๊ฐ„๋‹จํ•œ ํŒฉํ† ๋ฆฌ ํŒจํ„ด ๋จผ์ € ๊ฐ„๋‹จํ•œ ํŒฉํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด๋ณด๊ณ  ์ด๋ฅผ ์ ์ง„์ ์œผ๋กœ ํŒจํ„ด์„ ์ ์šฉํ•˜์—ฌ ์—…๊ทธ๋ ˆ์ด๋“œ ํ•˜๋Š” ์‹์œผ๋กœ ์ง„ํ–‰ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋จผ์ € ์•„๋ž˜์— ๋…ธํŠธ๋ถ์„ ์ƒ์„ฑํ•˜๋Š” ํ•จ์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜ type์— ๋”ฐ๋ผ์„œ ๋…ธํŠธ๋ถ์„ ์ƒ์„ฑํ•˜๊ณ  ์ค€๋น„, ์„ค์ •, ํฌ์žฅํ•ด์„œ ์ตœ์ข…์ ์œผ๋กœ ๋…ธํŠธ๋ถ์„ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. public NoteBook creatNoteBook(String type) { NoteBook noteBook; if(type.equals("Macbook")) { noteBook = new MackBook(); } else if (type.equals("LG Gram")) { noteBook = new LGGram(); } else if (type.equals("GalaxyBook")) { noteBook = new Ga..

๐ŸŒป JAVA/๋””์ž์ธ ํŒจํ„ด

6. ์ปค๋งจ๋“œ(Command) ํŒจํ„ด - Head First Design Patterns

์ปค๋งจ๋“œ ํŒจํ„ด ์ •์˜ ) ์ปค๋งจ๋“œ ํŒจํ„ด์„ ์ด์šฉํ•˜๋ฉด ์š”๊ตฌ์‚ฌํ•ญ์„ ๊ฐ์ฒด๋กœ ์บก์Šํ™” ํ• ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์จ์„œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋‹ค๋ฅธ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ง‘์–ด ๋„ฃ์„์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ, ์š”์ฒญ ๋‚ด์—ญ์„ ํ์— ์ €์žฅํ•˜๊ฑฐ๋‚˜ ๋กœ๊ทธ๋ฅผ ๊ธฐ๋กํ•˜์—ฌ, ์ž‘์—… ์ทจ์†Œ ๊ธฐ๋Šฅ๋„ ๋„ฃ์„์ˆ˜ ์žˆ๋‹ค. ์ปค๋งจํŠธ ํŒจํ„ด์€ ์ผ๋ จ์˜ ํ–‰๋™์„ ํŠน์ • ๋ฆฌ์‹œ๋ฒ„ ํ•˜๊ณ  ์—ฐ๊ฒฐ ์‹œํ‚ด์œผ๋กœ์จ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์บก์Šํ™” ์‹œํ‚จ๋‹ค. ์š”์ฒญ์„ ํ•˜๋Š” ๊ฐ์ฒด์™€ ๊ทธ ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๋ถ„๋ฆฌ์‹œํ‚ค๊ณ  ์‹ถ๋‹ค๋ฉด ์ปค๋งจ๋“œ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. ์ปค๋งจ๋“œ ํŒจํ„ด : ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ Remote Control ์˜ˆ์ œ public class LightOnCommand implements Command { Light light; public LightOnCommand(Light light) { this.light = light; } public..

๐ŸŒป JAVA/๋””์ž์ธ ํŒจํ„ด

5. ์‹ฑ๊ธ€ํ„ด (Singleton) ํŒจํ„ด - Head First Design Patterns

์ธ์Šคํ„ด์Šค ์ƒ์„ฑํ• ๋•Œ ์–ด๋–ป๊ฒŒ ํ• ๊นŒ? --------> new MyClass(); ๋งŒ์•ฝ ์ƒ์„ฑ์ž๊ฐ€ private์œผ๋กœ ์„ ์–ธ๋ผ์žˆ์œผ๋ฉด? --------> ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ๋ถˆ๊ฐ€. ์ƒ์„ฑํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด?? --> ์ธ์Šคํ„ด์Šค๋ณ€์ˆ˜๋ฅผ static๋ณ€์ˆ˜๋กœ ๋ฏธ๋ฆฌ ์„ ์–ธํ›„ --> ์š”์ฒญ์‹œ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋„˜๊ฒจ์ฃผ๋Š” ์‹์œผ๋กœ ์ƒ์„ฑํ•ด์ค€๋‹ค. public class Singleton{ private static Singleton uniqueInstance; private Singleton() { } // private๋กœ ์„ ์–ธ๋œ ์ƒ์„ฑ์ž public static Singleton getInstance() { //์ธ์Šคํ„ด์Šค ์ƒ์„ฑํ•˜๋Š” ๋ฉ”์†Œ๋“œ if (uniqueInstance == null) { //์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋œ ์ ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ›„ uniqueInsta..

๐ŸŒป JAVA/๋””์ž์ธ ํŒจํ„ด

4. ํŒฉํ† ๋ฆฌ(Factory) ํŒจํ„ด - Head First Design Patterns

"new" ๋Š” ๊ตฌ์ƒ ๊ฐ์ฒด๋ฅผ ๋œปํ•œ๋‹ค. ์•ž์—์„œ ๋ฐฐ์šด ๊ฒƒ ์ฒ˜๋Ÿผ ๊ตฌ์ƒํด๋ž˜์Šค๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ฝ”๋”ฉํ•˜๋ฉด ๋‚˜์ค‘์— ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ง€๊ณ , ์œ ์—ฐ์„ฑ์ด ๋–จ์–ด์ง€๊ฒŒ ๋œ๋‹ค. Duck duck; if( picnic) { duck = new MallardDuck(); } else if( hunting ){ duck = new DecoyDuck(); } else if ( inBathTub){ duck = new RubberDuck(); } ์ด๋Ÿฐ ์ฝ”๋“œ๋Š” ๋ญ”๊ฐ€๋ฅผ ๋ฐ˜์˜ํ•˜๊ฑฐ๋‚˜, ํ™•์žฅํ•ด์•ผ ํ• ๋•Œ ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ํ™•์ธํ•˜๊ณ  ์ถ”๊ฐ€ ๋˜๋Š” ์ œ๊ฑฐ ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋œปํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋Ÿฐ ์ฝ”๋“œ๋Š” ๊ด€๋ฆฌ ๋ฐ ๊ฐฑ์‹ ์ด ํž˜๋“ค์–ด์ง€๊ณ  ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ธธ ๊ฐ€๋Šฅ์„ฑ์ด ํฌ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๊ตฌ์ƒํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๋ถ€๋ถ„์„ ์•„์˜ˆ ๋‹ค๋ฅธ์ชฝ์œผ๋กœ ๋ถ„๋ฆฌ ์‹œ์ผœ์•ผ ํ•œ๋‹ค. ์•ž์—์„œ ๋ฐฐ์› ๋˜..

๐ŸŒป JAVA/๋””์ž์ธ ํŒจํ„ด

3. ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ(Decorator) ํŒจํ„ด - Head First Design Patterns

์ปคํ”ผ ์ „๋ฌธ์ ์„ ์ƒ๊ฐํ•ด๋ณด์ž. ๊ฐ์ฒด ๋งˆ์„์— ์Šคํƒ€๋ฒ„์ฆˆ๋ผ๋Š” ์ปคํ”ผ์ˆ์ด ์žˆ๋‹ค. ์ปคํ”ผ์˜ ์ข…๋ฅ˜๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€์— ์ถ”๊ฐ€ํ• ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋‰ด๊ฐ€ ์ˆ˜์‹ญ๊ฐ€์ง€๊ฐ€ ๋ ์ˆ˜๋„ ์žˆ๋‹ค. ๋‹ค์Œ ๊ทธ๋ฆผ์„ ๋ณด์ž. ์ด๋ ‡๊ฒŒ ํด๋ž˜์Šค ๊ฐœ์ˆ˜๊ฐ€ ์—„์ฒญ๋‚˜๊ฒŒ ๋Š˜์–ด๋‚œ๋‹ค. ์ปคํ”ผ ๋ฉ”๋‰ด๊ฐ€ ๋” ๋Š˜์–ด๋‚˜๋ฉด ํ›จ์”ฌ ๋” ๋Š˜์–ด๋‚  ๊ฒƒ์ด๋‹ค. ์ƒ์†์ด ๊ฐ•๋ ฅํ•˜๊ธด ํ•˜์ง€๋งŒ, ๋ชจ๋“  ์„œ๋ธŒ ํด๋ž˜์Šค์—์„œ๋Š” ๋˜‘๊ฐ™์€ ํ–‰๋™์„ ์ƒ์†๋ฐ›๊ฒŒ ๋œ๋‹ค. ์ด๋Ÿด๋•Œ, ๊ตฌ์„ฑ์„ ํ†ตํ•ด์„œ ํ–‰๋™์„ ํ™•์žฅํ•˜๊ฒŒ ๋˜๋ฉด ์‹คํ–‰์ค‘์— ๋™์ ์œผ๋กœ ํ–‰๋™์„ ์„ค์ •ํ•  ์ˆ˜์žˆ๋‹ค. (์ŠคํŠธ๋ ˆํ‹ฐ์ง€ ํŒจํ„ด) ๋””์ž์ธ ์›์น™ ) ํด๋ž˜์Šค๋Š” ํ™•์žฅ์— ๋Œ€ํ•ด์„œ๋Š” ์—ด๋ ค์žˆ์–ด์•ผ ํ•˜์ง€๋งŒ, ์ฝ”๋“œ ๋ณ€๊ฒฝ์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•œ๋‹ค. O.C.P ( Open-Closed Principle) *๋ฌด์กฐ๊ฑด OCP๋ฅผ ์ ์šฉํ•˜๋Š” ๊ฒƒ์€ ์‹œ๊ฐ„ ๋‚ญ๋น„๊ฐ€ ๋ ์ˆ˜๋„ ์žˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ํ™•์žฅํ•ด์•ผ ํ•  ๋ถ€๋ถ„์„ ์„ ํƒํ• ๋•Œ๋Š” ์„ธ์‹ฌํ•œ ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์—ฌ์•ผ ..

๐ŸŒป JAVA/๋””์ž์ธ ํŒจํ„ด

2. ์˜ต์ €๋ฒ„(Observer) ํŒจํ„ด - Head First Design Patterns

* ์˜ต์ €๋ฒ„ ํŒจํ„ด์€ ์‰ฝ๊ฒŒ ๋งํ•ด์„œ, ์‹ ๋ฌธ์‚ฌ ๊ตฌ๋… ๋ฉ”์ปค๋‹ˆ์ฆ˜๊ณผ ๊ฐ™๋‹ค๊ณ  ํ• ์ˆ˜ ์žˆ๋‹ค. ์ถœํŒ์‚ฌ๋ฅผ ์ฃผ์ œ(Subject) , ๊ตฌ๋…์ž๋ฅผ ์˜ต์ €๋ฒ„(Observer) ๋ผ๊ณ  ์ •ํ•ด๋ณด์ž. ์˜ต์ €๋ฒ„๋Š” ๋“ฑ๋ก(register) , ์ œ๊ฑฐ(remove) ๊ฐ€ ์ž์œ ๋กญ๋‹ค. ์˜ต์ €๋ฒ„ ํŒจํ„ด ์ •์˜ ) ํ•œ ๊ฐ์ฒด์˜ ์ƒํƒœ๊ฐ€ ๋ฐ”๋€Œ๋ฉด ๊ทธ ๊ฐ์ฒด์˜ ์˜์กดํ•˜๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด๋“คํ•œํ…Œ ์—ฐ๋ฝ์ด ๊ฐ€๊ณ , ์ž๋™์œผ๋กœ ๋‚ด์šฉ์ด ๊ฐฑ์‹ ๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ผ๋Œ€๋‹ค ์˜์กด์„ฑ์„ ์ •์˜ํ•œ๋‹ค. ์˜ต์ €๋ฒ„์— ๋Œ€ํ•œ ๋ชจ๋“  ์ œ์–ด ( ๋“ฑ๋ก(register) , ์ œ๊ฑฐ(remove) , ์•Œ๋ฆผ(notify) ) ๋Š” Subject์—์„œ ๊ด€๋ฆฌํ•œ๋‹ค. ๋””์ž์ธ ์›์น™ ) ์„œ๋กœ ์ƒํ˜ธ์ž‘์šฉ์„ ํ•˜๋Š” ๊ฐ์ฒด ์‚ฌ์ด์—์„œ๋Š” ๊ฐ€๋Šฅํ•˜๋ฉด *๋Š์Šจํ•˜๊ฒŒ ๊ฒฐํ•ฉํ•˜๋Š” ๋””์ž์ธ์„ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค. * ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์ƒ๊ฒจ๋„ ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌ๋ฅผ ํ• ์ˆ˜๊ฐ€ ์žˆ๋‹ค. ๊ฐ์ฒด ์‚ฌ์ด์˜ ์ƒํ˜ธ์˜์กด์„ฑ์„ ์ตœ์†Œํ™” ํ• ์ˆ˜ ..