Search

์ „๋žต ํŒจํ„ด

์ „๋žต ํŒจํ„ด (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
๋ณต์‚ฌ