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() { ..
Adapter ๐ก ‘์ด๋ฏธ ์ ๊ณต๋ ๊ฒ’๊ณผ ‘ํ์ํ ๊ฒ’ ์ฌ์ด์ ‘์ฐจ์ด’๋ฅผ ๋ฉ์ฐ๋ ๋์์ธ ํจํด Wrapper ํจํด์ด๋ผ๊ณ ๋ ๋ถ๋ฆผ [์์ ] ์์์ ์ฌ์ฉํ ํจํด ํด๋์ค์ ์ํ Adapter ํจํด Banner ํด๋์ค ๋ฏธ๋ฆฌ ์ ๊ณต๋๋ ํด๋์ค public class Banner { private String string; public Banner(String string) { this.string = string; } public void showWithParen() { System.out.println("(" + string + ")"); } public void showWithAster() { System.out.println("*" + string + "*"); } } Print ์ธํฐํ์ด์ค ํ์๋ก ํ๋ ์ธํฐํ์ด์ค ..
Iterator ๋ฌด์์ธ๊ฐ ๋ง์ด ๋ชจ์ฌ ์์ ๋ ์ด๋ฅผ ์์๋๋ก ๊ฐ๋ฆฌํค๋ฉฐ ์ ์ฒด๋ฅผ ๊ฒ์ํ๊ณ ์ฒ๋ฆฌ๋ฅผ ๋ฐ๋ณตํ๋ ๊ฒ iterator: ๋ฐ๋ณต์ Iterable Interface ์ฒ๋ฆฌ๋ฅผ ๋ฐ๋ณตํ ๋์์ ๋ํ๋ ์ด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค๋ ๋ฐฐ์ด์ฒ๋ผ ๋ญ๊ฐ ๋ง์ด ๋ชจ์ฌ์๋ ๊ฒ(=์งํฉ์ฒด)๊ฐ ๋๋ค package java.lang.* public interface Iterable { public abstract Iterator iterator(); } `iterator()`: ์งํฉ์ฒด์ ํฌํจ๋ ์์๋ฅผ ํ๋ํ๋ ์ฒ๋ฆฌํด ๋๊ฐ๊ณ ์ถ์ ๋ ์ฌ์ฉ Iterator Interface ํ๋ํ๋์ ์์์ฒ๋ฆฌ๋ฅผ ๋ฐ๋ณตํ๊ธฐ ์ํ ๊ฒ → ๋ฃจํ ๋ณ์ ์ญํ package java.util.* public interface Iterator { public ab..