์ ๋ต ํจํด (Strategy Pattern)
์ ๋ต ํจํด์ ์๊ณ ๋ฆฌ์ฆ์ ์บก์ํํ์ฌ ์คํ ์ค์ ๊ต์ฒด ๊ฐ๋ฅํ๊ฒ ๋ง๋๋ ๋์์ธ ํจํด์
๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ์ ์์กดํ์ง ์๊ณ , ์ธํฐํ์ด์ค๋ฅผ ํตํด ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋๋ค. ์ด๋ฅผ ํตํด ์ฝ๋์ ์ ์ฐ์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ์ด ํฅ์๋ฉ๋๋ค.
์ฃผ์ ๋ชฉ์
โข
์๊ณ ๋ฆฌ์ฆ ๊ตฐ์ ์ ์ํ๊ณ ๊ฐ๊ฐ์ ์บก์ํํ์ฌ ์ํธ ๊ต์ฒด ๊ฐ๋ฅํ๊ฒ ๋ง๋ฆ
โข
ํด๋ผ์ด์ธํธ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ถ๋ฆฌํ์ฌ ์๊ณ ๋ฆฌ์ฆ์ด ๋
๋ฆฝ์ ์ผ๋ก ๋ณ๊ฒฝ๋ ์ ์๋๋ก ํจ
โข
๋ฐํ์์ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฐํ๊ฒ ๋ณ๊ฒฝํ ์ ์์
ํน์ง
โข
์๊ณ ๋ฆฌ์ฆ ์บก์ํ: ๊ฐ ์๊ณ ๋ฆฌ์ฆ์ ๋ณ๋ ํด๋์ค๋ก ๋ถ๋ฆฌ
โข
๋์จํ ๊ฒฐํฉ: ํด๋ผ์ด์ธํธ๋ ์ธํฐํ์ด์ค์๋ง ์์กด
โข
ํ์ฅ ์ฉ์ด: ์๋ก์ด ์๊ณ ๋ฆฌ์ฆ ์ถ๊ฐ๊ฐ ์ฌ์
โข
์ ๋ต ๊ต์ฒด ๊ฐ๋ฅ: ๋ฐํ์์ ์๊ณ ๋ฆฌ์ฆ ๋ณ๊ฒฝ ๊ฐ๋ฅ
์์ ์ฝ๋
// ์ ๋ต ์ธํฐํ์ด์ค
interface PaymentStrategy {
void pay(int amount);
}
// ๊ตฌ์ฒด์ ์ธ ์ ๋ต ํด๋์ค๋ค
class CreditCardPayment implements PaymentStrategy {
public void pay(int amount) {
System.out.println("Credit Card: " + amount);
}
}
class PaypalPayment implements PaymentStrategy {
public void pay(int amount) {
System.out.println("Paypal: " + amount);
}
}
// ์ปจํ
์คํธ
class ShoppingCart {
private PaymentStrategy paymentStrategy;
public void setPaymentStrategy(PaymentStrategy strategy) {
this.paymentStrategy = strategy;
}
public void checkout(int amount) {
paymentStrategy.pay(amount);
}
}
Java
๋ณต์ฌ
์ฝ๋ ์ค๋ช
์ ์์ ์ฝ๋๋ ๊ฒฐ์ ์์คํ
์ ์ ๋ต ํจํด์ ์ ์ฉํ ์์์
๋๋ค:
โข
PaymentStrategy ์ธํฐํ์ด์ค: ๋ชจ๋ ๊ฒฐ์ ์ ๋ต์ด ๊ตฌํํด์ผ ํ๋ ๊ธฐ๋ณธ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํฉ๋๋ค. pay() ๋ฉ์๋๋ฅผ ์ ์ธํฉ๋๋ค.
โข
๊ตฌ์ฒด์ ์ธ ์ ๋ต ํด๋์ค๋ค: CreditCardPayment์ PaypalPayment๋ PaymentStrategy ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์ฌ ๊ฐ๊ฐ์ ๊ฒฐ์ ๋ฐฉ์์ ๊ตฌํํฉ๋๋ค.
โข
ShoppingCart ํด๋์ค (์ปจํ
์คํธ):- setPaymentStrategy(): ๊ฒฐ์ ์ ๋ต์ ์ค์ ํ๋ ๋ฉ์๋- checkout(): ์ค์ ๋ ๊ฒฐ์ ์ ๋ต์ ์ฌ์ฉํ์ฌ ์ค์ ๊ฒฐ์ ๋ฅผ ์ํํ๋ ๋ฉ์๋
์ด๋ ๊ฒ ๊ตฌํํ๋ฉด ์๋ก์ด ๊ฒฐ์ ๋ฐฉ์์ ์ถ๊ฐํ ๋ ๊ธฐ์กด ์ฝ๋๋ฅผ ์์ ํ์ง ์๊ณ , ์๋ก์ด ์ ๋ต ํด๋์ค๋ง ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค. ๋ํ ๋ฐํ์์ ๊ฒฐ์ ๋ฐฉ์์ ์์ ๋กญ๊ฒ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
์ฌ์ฉ ์์
ShoppingCart cart = new ShoppingCart();
// ์ ์ฉ์นด๋ ๊ฒฐ์ ์ฌ์ฉ
cart.setPaymentStrategy(new CreditCardPayment());
cart.checkout(100);
// PayPal ๊ฒฐ์ ๋ก ๋ณ๊ฒฝ
cart.setPaymentStrategy(new PaypalPayment());
cart.checkout(200);
Java
๋ณต์ฌ