Strategy Pattern

Strategy Pattern (์ŠคํŠธ๋ž˜ํ‹ฐ์ง€ ํŒจํ„ด)

๋ณ€๊ฒฝ์„ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ•

์ผ๋ถ€๋ฅผ ์ˆ˜์ •ํ–ˆ์„ ๋•Œ ์ „์ฒด๋ฅผ ์ปดํŒŒ์ผ/๋นŒ๋“œํ•ด์•ผ ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์€ ์žฅ๊ธฐ์  ์œ„ํ—˜์œผ๋กœ ์ด์–ด์ง„๋‹ค. ๋”ฐ๋ผ์„œ ๋ณ€๊ฒฝ์„ ์œ„ํ•œ ์„ค๊ณ„๋ฅผ ํ•ด์•ผ ํ•œ๋‹ค.

์ด๋Š” ๋‹ค์Œ์— ์˜ํ•ด ์ด๋ฃจ์–ด์ง„๋‹ค.

  1. ์ถ”์ƒ์ ์ธ ๊ฒƒ(์ธํ„ฐํŽ˜์ด์Šค)์— ์˜์กดํ•˜๊ณ , ๊ตฌ์ฒด์ ์ธ ๊ฒƒ(๊ตฌํ˜„๋ฌผ)์— ์˜์กดํ•˜์ง€ ๋ง์•„์•ผ ํ•œ๋‹ค.

  2. ์ƒ์†(extend)๋ณด๋‹ค๋Š” ์ง‘ํ•ฉ(aggregation, ๋‚ด๋ถ€์— field๋กœ ํฌํ•จํ•˜๋Š” ๊ฒƒ)์„ ์• ์šฉํ•ด์•ผ ํ•œ๋‹ค.

  3. ์„ค๊ณ„ ์‹œ ๋ณ€ํ•  ๋ถ€๋ถ„๊ณผ ๋ณ€ํ•˜์ง€ ์•Š์„ ๋ถ€๋ถ„์„ ์ž˜ ๋ถ„๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.

    • ์žฌ์„ค๊ณ„์˜ ์›์ธ์ด ๋ฌด์—‡์ผ์ง€์— ์ดˆ์ ์„ ๋‘”๋‹ค.

    • ์ž์ฃผ ๋ณ€ํ•˜๋Š” ๊ฐœ๋…์€ ์บก์Аํ™”ํ•œ๋‹ค.

ํŒจํ„ด ๋ ˆ๋ฒจ์—์„œ ๋ณ€๊ฒฝ์„ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ• - ์ŠคํŠธ๋ž˜ํ‹ฐ์ง€ ํŒจํ„ด

์ŠคํŠธ๋ž˜ํ‹ฐ์ง€ ํŒจํ„ด์ด๋ž€, ๋ณ€ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํŒจ๋ฐ€๋ฆฌ๋ฅผ ์ •์˜ํ•˜๊ณ  ๊ฐ๊ฐ์„ ์บก์Аํ™”ํ•œ ๋’ค, ์ด๋ฅผ ๋‹ค๋ฅธ ํด๋ž˜์Šค๊ฐ€ ํฌํ•จํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ์„ค๊ณ„ ๊ธฐ๋ฒ•์ด๋‹ค.

์ŠคํŠธ๋ž˜ํ‹ฐ์ง€ ํŒจํ„ด์€ ๋™์ผํ•œ ๋ฌธ์ œ๋ฅผ ๋‹ค๋ฃจ๋Š” ์—ฌ๋Ÿฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ํ•˜๋‚˜์˜ ์ธํ„ฐํŽ˜์ด์Šค(Strategy)๋ฅผ ๊ตฌํ˜„ํ•˜๋„๋ก ํ•˜์—ฌ, ํ•„์š”ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์‰ฝ๊ฒŒ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

๊ตฌ์„ฑ ์š”์†Œ

Strategy-Pattern
  • Context - ์ „๋žต์„ ์ด์šฉํ•˜๋Š” ๊ฐ์ฒด. ์ „๋žต์„ ๊ต์ฒดํ•˜๊ธฐ ์œ„ํ•œ setter ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์ง„๋‹ค.

  • Strategy - ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜(์ „๋žต)์„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค/์ถ”์ƒ ํด๋ž˜์Šค

  • ConcreteStrategy - ๊ตฌ์ฒด์  ์•Œ๊ณ ๋ฆฌ์ฆ˜๋“ค์ด ์ •์˜๋˜๋Š” ํด๋ž˜์Šค

ํŠน์ง•

  • ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์—์„œ ํŠน์ • ์ปดํฌ๋„ŒํŠธ(๋ฏธ๊ฐœ๋ฐœ)์„ ํ…Œ์ŠคํŒ…ํ•˜๊ณ ์ž ํ•  ๋•Œ ์ผ๋‹จ Stub์„ ์ด์šฉํ•˜๊ณ  ์ดํ›„ ๊ฐœ๋ฐœ๋œ ๊ฒƒ์œผ๋กœ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•ด ์ด ํŒจํ„ด์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

Last updated