๋ชฉ์ฐจ
์ด๋ค ์ํฉ์์ ์ฐ์ผ๊น?
์ ํ๋ฆฌ์ผ์ด์ ๋ด์์ A๋ผ๋ ๊ฐ์ฒด๋ฅผ ๋ง๋๋๋ฐ์ 10์ด๊ฐ ๊ฑธ๋ฆฐ๋ค๊ณ ํ์.
A ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ผ๋ง ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋์ํ๋๋ฐ
A ๊ฐ์ฒด์ ๊ฐ์ด ํ์ํ ์ํฉ์ ์๋๋ผ๊ณ ํ์. ์ฆ A์ ๊นกํต๋ง ์์ผ๋ฉด ๋๋ค๋ ์๊ธฐ์ด๋ค!
๋ค์ ํ ์ผ์ด ๋๋ฌด ๋ง์๋ 10์ด๋ฅผ ๊ธฐ๋ค๋ ค์ A๊ฐ์ฒด๊ฐ ๋ง๋ค์ด์ง๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋๊ฒ ๋์ ์ ํ์ผ๊น?
์ฐจ๋ผ๋ฆฌ A๊ฐ์ฒด์ ๊ฐ์ด ์ค์ ๋ก ํ์ํ ๋ A๋ฅผ ๋ง๋ค๊ณ ๊ทธ ์ ์๋ ๊นกํต์ธ ์ฑ๋ก ๋๋๋ฉด ์ด๋จ๊น?
ํ๋ก์ ํจํด์ด๋?
ํน์ ๊ฐ์ฒด์ ๋ํ ์ ๊ทผ์ ์ ์ดํ๊ฑฐ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์๋ ํจํด
์ด๊ธฐํ ์ง์ฐ, ์ ๊ทผ์ ์ด, ์บ์ฑ ๋ฑ ๋ค์ํ๊ฒ ์์ฉํ ์ ์๋ค!
ํ๋ก์์ ํ์ฉ
- ์ด๊ธฐํ ์ง์ฐ
๋ฆฌ์์ค๊ฐ ๋ง์ด ์ฌ์ฉ๋๋ ๊ฐ์ฒด์ธ ๊ฒฝ์ฐ, ํด๋น ๊ฐ์ฒด ํ์ ์ ํ๋ก์๋ฅผ ๋ง๋ ํ
์ค์ ๊ฐ์ฒด๊ฐ ํ์ํ ์๊ฐ์ ํ๋ก์๊ฐ ์ค์ ๊ฐ์ฒด๋ฅผ ๋ฐ๋ผ๋ณด๊ฒ ํด์ ์ด๊ธฐํ๋ฅผ ์ต๋ํ ๋ฆ์ถ๋ค
- ์ ๊ทผ์ ์ด
์ด๋ค ๊ฐ์ฒด๋ ํน์ ๊ถํ์ด ์์ด์ผ๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ ๋, ์ค๊ฐ์ ํ๋ก์๋ฅผ ๋๊ณ
ํ๋ก์์์ ๊ถํ์ ์ฒดํฌํ ํ ์ค์ ๊ฐ์ฒด์ ์ ๊ทผํ๊ฒํ๋ค
- ์บ์ฑ
๊ฐ์ฒด์ ์ ๊ทผํ ๋, ์ด๋ฏธ ์ฌ๋ฌ๋ฒ ์ ๊ทผํ๋ ๊ฐ์ฒด๋ผ๋ฉด ๊ตณ์ด ์ค์ ๊ฐ์ฒด๊น์ง ๊ฐ์ง ์์๋ ๋์ง ์์๊น?
ํ๋ก์์์ ๊ฐ์ฒด์ ๊ฐ์ ์ ์ฅํด๋์๋ค๊ฐ ๋น ๋ฅด๊ฒ ๊ฐ์ ๋ฐํํด์ฃผ์ด ์บ์ฑ์ฒ๋ฆฌํ๋ค
๋ฑ๋ฑ...
์ฅ์
- ๊ธฐ์กด ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ํ๋ก์๋ฅผ ํตํด ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์๋ค
- ๊ธฐ์กด ์ฝ๋๊ฐ ํด์ผํ๋ ์ผ๋ง ์ ์งํ ์ ์๋ค.
๋จ์
- ์ฝ๋์ ๋ณต์ก๋ ์ฆ๊ฐ
๊ตฌํ์ฝ๋
๊ธฐ์กด์ฝ๋
public class GameService {
public void startGame() {
System.out.println("์ด ์๋ฆฌ์ ์ค์ ์ฌ๋ฌ๋ถ์ ์ง์ฌ์ผ๋ก ํ์ํฉ๋๋ค.");
}
}
---------------------------------------------------------------------------
public class Client {
public static void main(String[] args) throws InterruptedException {
GameService gameService = new GameService();
gameService.startGame();
}
}
๋ณ๊ฒฝ์ฝ๋
public interface GameService {
void startGame();
}
---------------------------------------------------------------
public class DefaultGameService implements GameService {
@Override
public void startGame() {
System.out.println("์ด ์๋ฆฌ์ ์ค์ ์ฌ๋ฌ๋ถ์ ์ง์ฌ์ผ๋ก ํ์ํฉ๋๋ค.");
}
}
---------------------------------------------------------------
public class GameServiceProxy implements GameService {
private GameService gameService; //์ค์ ๊ฐ์ฒด๊ฐ ํ์ํ ๋ ํธ์ถํด์ผํ๋ ์ฐธ์กฐํ๋ค
@Override
public void startGame() {
//์ด๊ธฐํ ์ง์ฐ
if (this.gameService == null) {
this.gameService = new DefaultGameService();
}
gameService.startGame();
}
}
public class Client {
public static void main(String[] args) {
GameService gameService = new GameServiceProxy();
gameService.startGame();
}
}
'๐ฐ Design Pattern' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Flyweight Pattern | ํ๋ผ์ด์จ์ดํธ ํจํด (0) | 2022.08.16 |
---|---|
Facade Pattern | ํผ์ฌ๋ ํจํด (0) | 2022.08.16 |
Decorator Pattern | ๋ฐ์ฝ๋ ์ดํฐ ํจํด (0) | 2022.08.16 |
Composite Pattern | ์ปดํฌ์ง ํจํด (0) | 2022.08.15 |
Bridge Pattern | ๋ธ๋ฆฟ์ง ํจํด (0) | 2022.08.15 |