CS/๋””์ž์ธ ํŒจํ„ด

[๋””์ž์ธ ํŒจํ„ด] ์ „๋žต ํŒจํ„ด(Strategy Pattern)

1eehyunji 2023. 8. 2. 16:49

๊ฐ์ฒด์˜ ํ–‰์œ„๋ฅผ ๋ฐ”๊พธ๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ '์ง์ ‘' ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ์ „๋žต์ด๋ผ ๋ถ€๋ฅด๋Š” '์บก์Аํ™”ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜'์„ ์ปจํ…์ŠคํŠธ ์•ˆ์—์„œ ๋ฐ”๊ฟ”์ฃผ๋ฉด์„œ ์ƒํ˜ธ ๊ต์ฒด๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ํŒจํ„ด์ด๋‹ค. 

*์ปจํ…์ŠคํŠธ : ์ƒํ™ฉ, ๋งฅ๋ฝ, ๋ฌธ๋งฅ์„ ์˜๋ฏธํ•˜๋ฉฐ ๊ฐœ๋ฐœ์ž๊ฐ€ ์–ด๋–ค ์ž‘์—…์„ ์™„๋ฃŒํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ด€๋ จ ์ •๋ณด

 

์˜ˆ์‹œ)

์ถœ์ฒ˜ : ์šฐ์•„ํ•œํ…Œํฌ [10๋ถ„ ํ…Œํฌํ†ก] ์™„ํƒœ์˜ ์ „๋žตํŒจํ„ด

๋™์ผ ๊ณ„์—ด์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜(๊ฑท๊ฑฐ๋‚˜ ๋›ฐ๋Š” ๋“ฑ์˜ ์ด๋™ ๋ฐฉ์‹ ๊ณ„์—ด)์„ ์ •์˜ํ•˜๊ณ , ์ด๋“ค์„ 'Move Strategy'๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์บก์Аํ™”ํ•ด์„œ ์ด๋“ค ์‚ฌ์ด์˜ ์ƒํ˜ธ ๊ตํ™˜์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•œ๋‹ค. ์ฆ‰, ๊ฑธ์–ด๊ฐ€๋˜ ๋ฌผ์ฒด๊ฐ€ ๋›ฐ์–ด๊ฐ€๊ธฐ๋„ ํ•˜๊ณ , ๋›ฐ์–ด๊ฐ€๋˜ ๋ฌผ์ฒด๊ฐ€ ๋‚ ์•„๊ฐ€๊ธฐ๋„ ํ•˜๊ฒŒ๋” ์ด๋™ ์ „๋žต์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. 

์ถœ์ฒ˜ : ์šฐ์•„ํ•œํ…Œํฌ [10๋ถ„ ํ…Œํฌํ†ก] ์™„ํƒœ์˜ ์ „๋žตํŒจํ„ด

Robot ์ด๋ผ๋Š” ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ•ด์„œ, ๊ฑท๊ธฐ ๋กœ๋ด‡(WalkingRobot), ๋›ฐ๊ธฐ ๋กœ๋ด‡(RunningRobot), ๋‚ ๊ธฐ ๋กœ๋ด‡(FlyingRobot) ํด๋ž˜์Šค๊ฐ€ Robot ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๊ฒŒ ํ–ˆ๋‹ค. ํ•ด๋‹น ๋กœ๋ด‡์ด ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค Main ํ•จ์ˆ˜์—์„œ ์ƒ์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•œ๋‹ค.

์ด์–ด์„œ ๋กœ๋ด‡์— ์˜จ๋„ ์กฐ์ ˆ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

์ถœ์ฒ˜ : ์šฐ์•„ํ•œํ…Œํฌ [10๋ถ„ ํ…Œํฌํ†ก] ์™„ํƒœ์˜ ์ „๋žตํŒจํ„ด

Robot ์ถ”์ƒ ํด๋ž˜์Šค์—๋Š” temperature() ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ์„ ์–ธํ•˜๊ณ , ํ•˜์œ„ ํด๋ž˜์Šค์—” ์ฐจ๊ฐ€์šด ์˜จ๋„ ์กฐ์ ˆ ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ๊ฑท๊ธฐ ๋กœ๋ด‡(ColdWalkingRobot), ๋”ฐ๋œปํ•œ ์˜จ๋„์กฐ์ ˆ ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ๊ฑท๊ธฐ ๋กœ๋ด‡(WarmWalkingRobot) ๋“ฑ์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ–ˆ๋‹ค.

๊ทธ๋งŒํผ ํด๋ž˜์Šค์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์•„์กŒ๋‹ค.

 

ํ•˜์ง€๋งŒ, ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€ ์—ฌ๋Ÿฌ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

์ฒซ ๋ฒˆ์งธ๋กœ, ๋ฉ”์†Œ๋“œ์˜ ์ˆ˜์ •์ด ์–ด๋ ต๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๊ฑท๊ธฐ ๋กœ๋ด‡์˜ move() ๋ฉ”์†Œ๋“œ๋ฅผ '๋น ๋ฅด๊ฒŒ ๊ฑธ์–ด์„œ ๋ฐฐ๋‹ฌํ•ฉ๋‹ˆ๋‹ค ์‚-๋น…'์„ ์ถœ๋ ฅํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ, ๋ชจ๋“  ๊ฑท๊ธฐ ๋กœ๋ด‡ ํด๋ž˜์Šค๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ๋ฉ”์†Œ๋“œ๋ฅผ ๋ณ€๊ฒฝํ•ด์ค˜์•ผ ํ•œ๋‹ค. 

๋‘ ๋ฒˆ์งธ๋กœ, ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋กœ๋ด‡์— ๋งํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ๊ฒฝ์šฐ, Robot ์ถ”์ƒํด๋ž˜์Šค์— Speak() ์ด๋ผ๋Š” ์ถ”์ƒ ๋ฉ”์†Œ๋“œ๋ฅผ ์„ ์–ธํ•˜๊ณ , ์˜์–ด๋ฅผ ํ•˜๋Š” ์ฐจ๊ฐ€์šด ์˜จ๋„ ์กฐ์ ˆ ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ๊ฑท๊ธฐ ๋กœ๋ด‡(EnglishColdWalkingRobot), ํ•œ๊ตญ์–ด๋ฅผ ํ•˜๋Š” ๋”ฐ๋œปํ•œ ์˜จ๋„ ์กฐ์ ˆ ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ๊ฑท๊ธฐ ๋กœ๋ด‡(KoreanWarmWalkingRobot),.. ์‹์œผ๋กœ ์„ ์–ธํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๊ธฐ๋Šฅ์— ๋”ฐ๋ผ ํ•˜์œ„ ํด๋ž˜์Šค์˜ ๊ฐœ ์ˆ˜๊ฐ€ ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ๋Š˜์–ด๋‚  ์ˆ˜ ์žˆ๋‹ค. 

 

์ด๋Ÿฌํ•œ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ตœ์ ํ™”๋œ ํŒจํ„ด์ด '์ „๋žต ํŒจํ„ด(Strategy Pattern)'์ด๋‹ค!

์œ„์—์„œ ๋ณด์—ฌ์ค€ ๋กœ๋ด‡ ์ฝ”๋“œ๋ฅผ ์ „๋žต ํŒจํ„ด์œผ๋กœ ์ˆ˜์ •ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. 

์ถœ์ฒ˜ : ์šฐ์•„ํ•œํ…Œํฌ [10๋ถ„ ํ…Œํฌํ†ก] ์™„ํƒœ์˜ ์ „๋žตํŒจํ„ด

์œ„ ์ฝ”๋“œ์—์„  ์ด๋™ ์ „๋žต์„ ๋‚˜ํƒ€๋‚ด๋Š” 'MoveStrategy' ์ธํ„ฐํŽ˜์ด์Šค ๋ฐ‘์— ๊ฑท๊ธฐ(Walk), ๋›ฐ๊ธฐ(Run) ๋“ฑ๊ณผ ๊ฐ™์€ ์ด๋™ ์ „๋žต์„ ๋‚˜ํƒ€๋‚ด๋Š” ํ•˜์œ„ ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ ,  ์˜จ๋„ ์กฐ์ ˆ ์ „๋žต์„ ๋‚˜ํƒ€๋‚ด๋Š” 'TemperatureStrategy' ์ธํ„ฐํŽ˜์ด์Šค ๋ฐ‘์— Cold, Warm๊ณผ ๊ฐ™์€ ์˜จ๋„ ์กฐ์ ˆ ์ „๋žต์„ ๋‚˜ํƒ€๋‚ด๋Š” ํ•˜์œ„ ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ•œ๋‹ค. 

์ด๋ฅผ ํ†ตํ•ด ์•ž์„œ์„œ ๊ฐ™์€ ๊ณ„์—ด์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋“ค์„ ์บก์Аํ™”ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

๊ทธ๋ฆฌ๊ณ , Robot์„ ์ƒ์„ฑํ•  ๋•Œ, ์ด๋™ ๋ฐฉ๋ฒ•๊ณผ ์˜จ๋„ ์กฐ์ ˆ ๋ฐฉ๋ฒ•์„ ํ•จ๊ป˜ ์ž…๋ ฅํ•ด์„œ ์ƒ์„ฑํ•œ Robot์€ ๊ฐ๊ฐ์˜ ์ด๋™ ์ „๋žต๊ณผ ์˜จ๋„ ์กฐ์ ˆ ์ „๋žต์„ ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค. 

 

์ด๋Ÿฌํ•œ ์ „๋žต ํŒจํ„ด ๊ธฐ๋ฐ˜์˜ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์€ ์•ž์„  ์ฝ”๋“œ์—์„œ ๋ฐœ์ƒํ–ˆ๋˜ ๋ฌธ์ œ์ ๋“ค์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ฒซ ๋ฒˆ์งธ๋กœ ๋ฉ”์„œ๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด์„  ํ•ด๋‹นํ•˜๋Š” ๋ชจ๋“  ํด๋ž˜์Šค๋ฅผ ๋ชจ๋‘ ์ˆœํšŒํ•˜๋ฉด์„œ ๋ฉ”์„œ๋“œ๋ฅผ ๋ณ€๊ฒฝํ•ด์ค˜์•ผ ํ–ˆ๋˜ ๋ฐ˜๋ฉด์—, ์ „๋žต ํŒจํ„ด์„ ์ด์šฉํ•œ ์œ„ ์ฝ”๋“œ์—์„  ๋ณ€๊ฒฝํ•˜๊ณ ์ž ํ•˜๋Š” ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ ํ•˜๋‚˜๋งŒ ๋ณ€๊ฒฝํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์•ž์„  ์ฝ”๋“œ์—์„  WalkingRobot์˜ ๋ฉ”์„œ๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ColdWalking, WarmWalking ๋“ฑ ๋ชจ๋“  WalkingRobot ํด๋ž˜์Šค๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ๋ณ€๊ฒฝํ•ด์ค˜์•ผ ํ–ˆ๋˜ ๋ฐ˜๋ฉด์—, ์ „๋žต ํŒจํ„ด ๊ธฐ๋ฐ˜์˜ ์œ„ ์ฝ”๋“œ์—์„  MoveStrategy๋ฅผ ์ƒ์†๋ฐ›๋Š” Walk ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ ํ•˜๋‚˜๋งŒ ๋ณ€๊ฒฝํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

๋‘ ๋ฒˆ์งธ๋กœ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด์„  ํ•˜์œ„ ํด๋ž˜์Šค์˜ ๊ฐœ์ˆ˜๋ฅผ ๋งŽ์ด ๋Š˜๋ ค์•ผ ํ–ˆ๋˜ ๋ฐ˜๋ฉด์—,

์ „๋žต ํŒจํ„ด์„ ์ด์šฉํ•œ ์œ„ ์ฝ”๋“œ์—์„  ์ƒˆ๋กœ์šด ์ธํ„ฐํŽ˜์ด์Šค์™€ ํ•ด๋‹น ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†๋ฐ›์€ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์˜ ํ•˜์œ„ํด๋ž˜์Šค๋“ค์„ ์„ ์–ธํ•ด์ฃผ๊ณ , Robot ํด๋ž˜์Šค์— ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ํ•จ์ˆ˜์— ๋งž์ถ”์–ด ์ˆ˜์ •ํ•œ ๋’ค์—, Robot ์ƒ์„ฑ ์‹œ ์ด๋™ ์ „๋žต, ์˜จ๋„ ์กฐ์ ˆ ์ „๋žต, ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ „๋žต์„ ํ•จ๊ป˜ ์ž…๋ ฅํ•ด์ฃผ๋ฉด ๋œ๋‹ค. 

๋งํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€๊ฒฝ๋œ๋‹ค.

๋˜, ์ „๋žต ํŒจํ„ด์„ ์™„์„ฑํ•˜๋ ค๋ฉด ํ•œ ์ „๋žต ์•ˆ์— ์•Œ๊ณ ๋ฆฌ์ฆ˜๋“ค์ด ์ƒํ˜ธ ๊ต์ฒด๊ฐ€ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค!

์ด๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ Robot ํด๋ž˜์Šค์— Setter๋ฅผ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค. ์ฐจ๊ฐ€์šด ์˜จ๋„ ์กฐ์ ˆ ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ๊ฑท๊ธฐ ๋กœ๋ด‡์„ Setter๋ฅผ ์ด์šฉํ•ด์„œ ์ฐจ๊ฐ€์šด ์˜จ๋„ ์กฐ์ ˆ ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ๋‚ ๊ธฐ ๋กœ๋ด‡์œผ๋กœ ๊ต์ฒด๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํŽธ๋ฆฌํ•˜๊ฒŒ ๊ฐ์ฒด์˜ ํ–‰์œ„๋ฅผ ์ƒํ˜ธ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ๋Š” ์ „๋žต ํŒจํ„ด์ด ์™„์„ฑ๋œ๋‹ค.