์ปค๋งจ๋ ํจํด (Command Pattern)
์ปค๋งจ๋ ํจํด์ ์์ฒญ์ ๊ฐ์ฒด์ ํํ๋ก ์บก์ํํ์ฌ ๋งค๊ฐ๋ณ์ํํ๊ณ , ์์ฒญ์ ํ์ ์ ์ฅํ๊ฑฐ๋ ๋ก๊ทธ๋ก ๊ธฐ๋กํ๋ฉฐ, ์คํ ์ทจ์ ๊ธฐ๋ฅ์ ์ง์ํ ์ ์๊ฒ ํด์ฃผ๋ ํ์ ํจํด์
๋๋ค. ์ด๋ฅผ ํตํด ์์ฒญํ๋ ๊ฐ์ฒด์ ์์ฒญ์ ์ํํ๋ ๊ฐ์ฒด๋ฅผ ๋ถ๋ฆฌํ์ฌ ์์คํ
์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ ์ ์์ต๋๋ค.
์ฃผ์ ๋ชฉ์
โข
์์ฒญ์ ๊ฐ์ฒด๋ก ์บก์ํํ์ฌ ๋ค์ํ ์์ฒญ์ ๋งค๊ฐ๋ณ์ํ
โข
์คํ ์ทจ์(undo)์ ์ฌ์คํ(redo) ๊ธฐ๋ฅ ๊ตฌํ ๊ฐ๋ฅ
โข
์์ฒญ์ ํ์๊ณผ ๋ก๊น
์ง์
โข
๋ฐ์ ์์ ์์ ์์ ๊ฒฐํฉ๋ ๊ฐ์
ํน์ง
โข
๋ช
๋ น(Command), ์์ ์(Receiver), ๋ฐ์ ์(Invoker), ํด๋ผ์ด์ธํธ(Client) ๋ค ๊ฐ์ง ์์๋ก ๊ตฌ์ฑ
โข
๊ฐ ๋ช
๋ น์ ๋
๋ฆฝ์ ์ธ ๊ฐ์ฒด๋ก ์กด์ฌํ์ฌ ํ์ฅ์ฑ์ด ์ข์
โข
์๋ก์ด ๋ช
๋ น์ ์ถ๊ฐํ ๋ ๊ธฐ์กด ์ฝ๋ ์์ ์ด ๋ถํ์
โข
๋ช
๋ น์ ์คํ ์ด๋ ฅ ๊ด๋ฆฌ ๊ฐ๋ฅ
์์ ์ฝ๋
// Command ์ธํฐํ์ด์ค
interface Command {
void execute();
}
// ๊ตฌ์ฒด์ ์ธ Command
class LightOnCommand implements Command {
private Light light;
public LightOnCommand(Light light) {
this.light = light;
}
public void execute() {
light.turnOn();
}
}
// Receiver
class Light {
public void turnOn() {
System.out.println("์กฐ๋ช
์ด ์ผ์ก์ต๋๋ค.");
}
}
// Invoker
class RemoteControl {
private Command command;
public void setCommand(Command command) {
this.command = command;
}
public void pressButton() {
command.execute();
}
}
// Client
public class Main {
public static void main(String[] args) {
Light light = new Light();
Command lightOn = new LightOnCommand(light);
RemoteControl remote = new RemoteControl();
remote.setCommand(lightOn);
remote.pressButton();
}
}
Java
๋ณต์ฌ
์ฝ๋ ์ค๋ช
์ ์์ ์ฝ๋๋ ์ปค๋งจ๋ ํจํด์ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ๋ณด์ฌ์ฃผ๋ ์กฐ๋ช
์ ์ด ์์คํ
์
๋๋ค.
โข
Command ์ธํฐํ์ด์ค: ๋ชจ๋ ์ปค๋งจ๋๊ฐ ๊ตฌํํด์ผ ํ๋ execute() ๋ฉ์๋๋ฅผ ์ ์ํฉ๋๋ค.
โข
LightOnCommand ํด๋์ค: Command ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๊ตฌ์ฒด์ ์ธ ์ปค๋งจ๋๋ก, ์กฐ๋ช
์ ์ผ๋ ๊ธฐ๋ฅ์ ์ํํฉ๋๋ค.
โข
Light ํด๋์ค (Receiver): ์ค์ ์์
์ ์ํํ๋ ์์ ์ ํด๋์ค๋ก, ์กฐ๋ช
์ ์ผ๋ ์ค์ ๋์์ ๊ตฌํํฉ๋๋ค.
โข
RemoteControl ํด๋์ค (Invoker): ์ปค๋งจ๋๋ฅผ ์คํํ๋ ํธ์ถ์๋ก, ๋ฒํผ ๋๋ฆ ๋์์ ํตํด ์ปค๋งจ๋๋ฅผ ์คํํฉ๋๋ค.
โข
Main ํด๋์ค (Client): ์ ์ฒด ๊ฐ์ฒด๋ค์ ์กฐํฉํ๊ณ ์คํํ๋ ํด๋ผ์ด์ธํธ ์ฝ๋์
๋๋ค.
์ด ๊ตฌ์กฐ๋ฅผ ํตํด ๋ฆฌ๋ชจ์ปจ(Invoker)์ ์กฐ๋ช
(Receiver)์ ๋์ ๋ฐฉ์์ ์ง์ ์ ํ์ ์์ด, ์ปค๋งจ๋ ๊ฐ์ฒด๋ฅผ ํตํด ๊ฐ์ ์ ์ผ๋ก ์กฐ๋ช
์ ์ ์ดํ ์ ์์ต๋๋ค. ์๋ก์ด ์ปค๋งจ๋(์: ์กฐ๋ช
๋๊ธฐ, ๋ฐ๊ธฐ ์กฐ์ ๋ฑ)๋ฅผ ์ถ๊ฐํ ๋๋ ๊ธฐ์กด ์ฝ๋๋ฅผ ์์ ํ ํ์ ์์ด ์๋ก์ด ์ปค๋งจ๋ ํด๋์ค๋ง ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค.