๋ชฉ์ฐจ
์ด๋ค ์ํฉ์์ ์ฐ์ผ๊น?
๊ฒ์ ์บ๋ฆญํฐ์ ์์ฑ์ ์๊ฐํด๋ณด์
์คํจ๋ ์๊ณ , ์บ๋ฆญํฐ ๊ณ ์ ์คํฌ๋ ์๊ณ , ๊ณตํต์ ์ธ ์บ๋ฆญํฐ ์คํฌ๋ ์๊ณ ...
์ด ๊ธฐ๋ฅ๊ณผ ๊ตฌํ๋ค์ ๋ชจ๋ ์ธํฐํ์ด์ค๋ ์ถ์ ํด๋์ค๋ฅผ ํ์ฅํด์ ๋ง๋ค ์ ์์๊น?
์๋ง implments ๋ค์ ๋ถ๋ ์ธํฐํ์ด์ค๋ค์ด 20๊ฐ๊ฐ ๋์ด๊ฐ์๋์๋ค ใ ใ
ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ๋ผ๋ณด๋๊ฑด '์บ๋ฆญํฐ'(์ถ์ํ)์ด๊ณ '์บ๋ฆญํฐ'์ ๊ตฌ์ฒด์ ์ธ ์คํจ๊ณผ ์คํฌ(๊ตฌํ์ฒด๋ค)์ ์ฐ๊ฒฐํด์ ์ฌ์ฉํ์!
๋ค๋ฅธ ์์๋ก, JDBC๋๋ผ์ด๋ฒ๋ฅผ ์ฌ์ฉํ ๋
DriverManager.getConnection, Statement.execute(SQL), connection.prepareStatement(SQL).. ๋ฑ์ด ๋ชจ๋ ์ถ์ํ๋ ๊ธฐ๋ฅ์ด๊ณ
Class.forName("DriverName")์์ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ์ฒด๋ค์ ๊ฐ์ ธ์ค๊ฒ๋๋ค!
๋ธ๋ฆฟ์ง ํจํด์ด๋?
์ถ์์ ์ธ ๊ฒ๊ณผ ๊ตฌ์ฒด์ ์ธ ๊ฒ์ ๋ถ๋ฆฌํ์ฌ ์ฐ๊ฒฐํ๋ ํจํด์ด๋ค.
ํฌ๊ฒ ๊ธฐ๋ฅ(๋ฉ์๋)๊ณผ ๊ตฌํ(๊ท์ฝ)์ ํด๋์ค ๊ณ์ธต์ผ๋ก ๋ถ๋ฆฌํ ํ, ๊ณ์ธต๊ตฌ์กฐ๋ก ํ์ฅํด๋๊ฐ๋ ๊ณผ์ ์์
๊ธฐ๋ฅ๊ณผ ๊ตฌํ์ ์ฐ๊ฒฐํด์ฃผ๋ ๊ฒ์ ๋ธ๋ฆฟ์ง ํจํด์ด๋ผ๊ณ ํ๋ค.
public static void main(String[] args) {
Shape tri = new Triangle(new RedColor());
tri.applyColor();
Shape pent = new Pentagon(new GreenColor());
pent.applyColor();
}
// Triangle filled with color red.
// Pentagon filled with color green.
์ฅ์
- ์ถ์์ ์ธ ์ฝ๋์ ๊ตฌ์ฒด์ ์ธ ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ๋ฉฐ, ๊ตฌ์ฒด์ ์ธ ์ฝ๋๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ํ์ฅํด๋๊ฐ ์ ์๋ค.
๋จ์
- ๊ณ์ธต๊ตฌ์กฐ๊ฐ ๋์ด๋ ๋ณต์ก๋๊ฐ ์ฆ๊ฐํ๋ค
๊ตฌํ์ฝ๋
๊ธฐ์กด์ฝ๋
public interface Champion extends Skin {
void move();
void skillQ();
void skillW();
void skillE();
void skillR();
}
public class KDA์๋ฆฌ implements Champion {
@Override public void move() { System.out.println("KDA ์๋ฆฌ move"); }
@Override public void skillQ() { System.out.println("KDA ์๋ฆฌ Q"); }
@Override public void skillW() { System.out.println("KDA ์๋ฆฌ W"); }
@Override public void skillE() { System.out.println("KDA ์๋ฆฌ E"); }
@Override public void skillR() { System.out.println("KDA ์๋ฆฌ R"); }
@Override
public String getName() {
return null;
}
}
public class App {
public static void main(String[] args) {
Champion kda์๋ฆฌ = new KDA์๋ฆฌ();
kda์๋ฆฌ.skillQ();
kda์๋ฆฌ.skillR();
}
}
์ฌ๊ธฐ์ ์คํจ์ด ํ๋์ฉ ๋์ฌ๋๋ง๋ค ๋์ผํ๊ฒ.. ๋น์ทํ๊ฒ ํด๋์ค๊ฐ ์์ฑ๋ ๊ฒ์ด๋ค!
์ฑํผ์ธ์ ๋์ ๋ถ๋ถ๊ณผ ์คํจ ๋ถ๋ถ์ ํฉ์ณ์ KDA์๋ฆฌ ํด๋์ค๋ฅผ ์ ์ํ๊ณ ์์ด ํ์ฅ์ด ์ด๋ ต๋ค.
๋ณ๊ฒฝ์ฝ๋
์ฑํผ์ธ ๋์๋ถ๋ถ๊ณผ ์คํจ๋ถ๋ถ์ ๋ถ๋ฆฌํ๋ค.
public class DefaultChampion implements Champion {
private Skin skin;
private String name;
public DefaultChampion(Skin skin, String name) {
this.skin = skin;
this.name = name;
}
@Override public void move() { System.out.printf("%s %s move\n", skin.getName(), this.name); }
@Override public void skillQ() { System.out.printf("%s %s Q\n", skin.getName(), this.name); }
@Override public void skillW() { System.out.printf("%s %s W\n", skin.getName(), this.name); }
@Override public void skillE() { System.out.printf("%s %s E\n", skin.getName(), this.name); }
@Override public void skillR() { System.out.printf("%s %s R\n", skin.getName(), this.name); }
@Override
public String getName() {
return null;
}
}
public class ์๋ฆฌ extends DefaultChampion {
public ์๋ฆฌ(Skin skin) {
super(skin, "์๋ฆฌ");
}
}
public class KDA implements Skin{
@Override
public String getName() {
return "KDA";
}
}
public abstract class App implements Champion {
public static void main(String[] args) {
Champion kda์๋ฆฌ = new ์๋ฆฌ(new KDA());
kda์๋ฆฌ.skillQ();
kda์๋ฆฌ.skillW();
Champion poolParty์๋ฆฌ = new ์๋ฆฌ(new PoolParty());
poolParty์๋ฆฌ.skillR();
poolParty์๋ฆฌ.skillW();
}
}
'๐ฐ Design Pattern' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Decorator Pattern | ๋ฐ์ฝ๋ ์ดํฐ ํจํด (0) | 2022.08.16 |
---|---|
Composite Pattern | ์ปดํฌ์ง ํจํด (0) | 2022.08.15 |
Adapter Pattern | ์ด๋ํฐํจํด (0) | 2022.08.14 |
Prototype Pattern | ํ๋กํ ํ์ ํจํด (0) | 2022.08.14 |
Abstract Factory | ์ถ์ ํฉํ ๋ฆฌ ํจํด (0) | 2022.08.14 |