🌻 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μ—μ„œ κ΄€λ¦¬ν•œλ‹€. λ””μžμΈ 원칙 ) μ„œλ‘œ μƒν˜Έμž‘μš©μ„ ν•˜λŠ” 객체 μ‚¬μ΄μ—μ„œλŠ” κ°€λŠ₯ν•˜λ©΄ *λŠμŠ¨ν•˜κ²Œ κ²°ν•©ν•˜λŠ” λ””μžμΈμ„ μ‚¬μš©ν•΄μ•Όν•œλ‹€. * 변경사항이 생겨도 μ‰½κ²Œ 처리λ₯Ό ν• μˆ˜κ°€ μžˆλ‹€. 객체 μ‚¬μ΄μ˜ μƒν˜Έμ˜μ‘΄μ„±μ„ μ΅œμ†Œν™” ν• μˆ˜ ..

iseunghan
'🌻 JAVA/λ””μžμΈ νŒ¨ν„΄' μΉ΄ν…Œκ³ λ¦¬μ˜ κΈ€ λͺ©λ‘