Notice
Recent Posts
Link
Today
Total
10-06 05:43
๊ด€๋ฆฌ ๋ฉ”๋‰ด

dingdong coding

Strategy Pattern ๋ณธ๋ฌธ

๐ŸฐJAVA/Design Pattern

Strategy Pattern

๐Ÿถ ๊ฐœ๋ฐœ๊ฐœ๋ฐœ ๐Ÿพ 2022. 7. 6. 02:09

ํ•„์š”์„ฑ 

๋จผ์ € Strategy Pattern์„ ์™œ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ์˜ˆ๋ฅผ ๋“ค์–ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๋กœ๋ด‡(Robot) ์„ค๊ณ„๋„์— ๋”ฐ๋ผ ์•„ํ†ฐ(Atom)๊ณผ ํƒœ๊ถŒ๋ธŒ์ด(TaekwonV)๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

 

 

ํƒœ๊ถŒ๋ธŒ์ด์™€ ์•„ํ†ฐ์€ ๊ณตํ†ต์ ์œผ๋กœ ๊ณต๊ฒฉ๊ณผ ์ด๋™ ๊ธฐ๋Šฅ์ด ์žˆ์ง€๋งŒ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋กœ๋ด‡ ํด๋ž˜์Šค์—์„œ attack์™€ move๋ฉ”์„œ๋“œ๋ฅผ ์ถ”์ƒ๋ฉ”์„œ๋“œ๋กœ ์„ค์ •ํ•ด ์ž์‹ ํด๋ž˜์Šค์—์„œ ์ •์˜ํ•˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

  ๊ณต๊ฒฉ ์ด๋™
ํƒœ๊ถŒ๋ธŒ์ด ๋ฏธ์‚ฌ์ผ ๊ณต๊ฒฉ ๊ฑท๊ธฐ
์•„ํ†ฐ ์ฃผ๋จน ๊ณต๊ฒฉ ํ•˜๋Š˜ ๋‚ ์•„๋‹ค๋‹ˆ๊ธฐ

 

๊ทธ๋Ÿฌ๋‹ค ํ•˜๋Š˜๋กœ ๋‚ ์•„๋‹ค๋‹ˆ๋˜ ์•„ํ†ฐ์ด ๊ฐ‘์ž๊ธฐ ๊ฑท๊ธฐ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์•„ํ†ฐ์˜ move() ๋ฉ”์„œ๋“œ๋ฅผ ์ˆ˜์ •ํ•ด์ฃผ๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

์—ฌ๊ธฐ์„œ ๋ฌธ์ œ์ ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

 

 

์ง์ ‘ move( )๋ฉ”์„œ๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ์ž‘์—…์€ OCP (Open/Close Principle)์— ์œ„๋ฐฐ๋˜๋Š” ์ž‘์—…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์•„ํ†ฐ์ด ๊ฑท๊ธฐ๋งŒ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋˜๋ฉด ํƒœ๊ถŒ๋ธŒ์ด์™€ move()๋ฉ”์„œ๋“œ ๋‚ด์šฉ์ด ์ค‘๋ณต๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ค‘๋ณต๋˜๋Š” ์ฝ”๋“œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 

 

๋˜ํ•œ ์ƒˆ๋กœ์šด ๋กœ๋ด‡์„ ์ถ”๊ฐ€ ๊ตฌํ˜„ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ, ๊ธฐ์กด ๋กœ๋ด‡๊ณผ ๊ฐ™์€ ๊ณต๊ฒฉ๋ฐฉ์‹, ๊ฑท๊ธฐ ๋ฐฉ์‹์„ ๊ฐ™๊ณ  ์žˆ๋‹ค๋ฉด ๋˜ ์ค‘๋ณต๋˜๋Š” ์ฝ”๋“œ๊ฐ€ ์Œ“์ด๊ณ  ์ˆ˜์ •์‹œ์—๋„ OCP๋ฅผ ์œ„๋ฐฐํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

์ •๋ฆฌ 

  OCP ์œ„๋ฐฐ

  ์‹œ์Šคํ…œ ํ™•์žฅ ์‹œ ์ค‘๋ณต๋˜๋Š” ์ฝ”๋“œ ๋ฐœ์ƒ 

 

์œ„ ๊ฐ™์€ ๋ฌธ์ œ์ ์ด ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž์ฃผ ๋ฐ”๋€Œ๋Š” ๊ณต๊ฒฉ์™€ ์ด๋™ ๋ฉ”์„œ๋“œ๋ฅผ ์บก์Šํ™” ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์ž์ฃผ ๋ณ€ํ™”๋˜๋Š” ๊ฒƒ์„ ์ฐพ๊ณ  ์ด๋ฅผ ํด๋ž˜์Šค๋กœ ์บก์Šํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

  OCP(Open-Closed Principle, ๊ฐœ๋ฐฉ ํ์‡  ์›์น™)

: ํด๋ž˜์Šค ํ™•์žฅ์—๋Š” ์—ด๋ ค์žˆ๊ณ  ๋ณ€๊ฒฝ์—๋Š” ๋‹ซํ˜€์žˆ์–ด์•ผํ•œ๋‹ค. 

 

  ์บก์Šํ™”(encapsulation)

: ๊ธฐ๋Šฅ๊ณผ ํŠน์„ฑ์˜ ๋ชจ์Œ์„ "ํด๋ž˜์Šค"๋ผ๋Š” "์บก์Š"์— ๋ถ„๋ฅ˜ํ•ด์„œ ๋„ฃ๋Š”๊ฒƒ

๊ด€๋ จ ์žˆ๋Š” ์†์„ฑ๊ณผ ๊ธฐ๋Šฅ์„ ํ•˜๋‚˜๋กœ ๋ฌถ๊ณ  ์ ‘๊ทผ ์ œ์–ด์ž๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ์ง์ ‘์ ์ธ ์ ‘๊ทผ์€ ์ฐจ๋‹จํ•˜๊ณ , ์ž๋ฃŒ๋ฅผ ์ˆ˜์ • ๋˜๋Š” ์กฐ์ž‘ ํ•  ์ˆ˜ ์žˆ๋Š” ๋™์ž‘์„ ๋‚ด๋ถ€์— ๋‘๋Š” ๋ฐฉ์‹

 

 

์ด๋ ‡๊ฒŒ ์ด๋™๊ณผ ๊ณต๊ฒฉ๊ธฐ๋Šฅ์„ ์บก์Šํ™”ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๊ฐ ๋ฉ”์„œ๋“œ ๋ณ„๋กœ ์ƒˆ๋กœ์šด ์ „๋žต(๊ณต๊ฒฉ ๋ฐฉ์‹, ์ด๋™๋ฐฉ์‹)์„  ์ž์œ ๋กญ๊ฒŒ ์ถ”๊ฐ€, ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค. 

 

๊ฐœ์„ ๋œ ์„ค๊ณ„

 

์ด๋Ÿฌํ•œ ํ•ด๊ฒฐ๋ฐฉ์‹์„ ์ „๋žต ํŒจํ„ด์ด๋ผ ํ•ฉ๋‹ˆ๋‹ค.

Strategy Pattern

:  ๋ง๊ทธ๋Œ€๋กœ ์ „๋žต์„ ์‰ฝ๊ฒŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ๋””์ž์ธ ํŒจํ„ด

:  ์ „๋žต ํŒจํ„ด์ด๋ž€ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์บก์Šํ™”ํ•˜์—ฌ ์„œ๋กœ ๊ฐ„ ์ƒํ˜ธ ๊ต์ฒด๊ฐ€ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•˜๋Š” ๋””์ž์ธ ํŒจํ„ด

:  ์ƒˆ๋กœ์šด ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ถ”๊ฐ€๋˜์–ด๋„ ๊ธฐ์กด์˜ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์—†์ด ์‰ฝ๊ฒŒ ์ถ”๊ฐ€๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง„๋‹ค. => OCP ๋งŒ์กฑ 

:  ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‰ฝ๊ฒŒ ์ „๋žต์„ ๋ฐ”๊ฟ”์•ผํ•  ํ•„์š”๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๋งŽ์ด ๋ฐœ์ƒํ•  ๋•Œ ์‚ฌ์šฉ

 

  ๊ฐ์ฒด๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ํ–‰์œ„๋“ค์„ ๊ฐ๊ฐ์˜ ์ „๋žต์œผ๋กœ ๋งŒ๋“ค์–ด ๋†“๊ณ  ๋™์ ์œผ๋กœ ํ–‰์œ„์˜ ์ˆ˜์ •์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ „๋žต์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ํ–‰์œ„์˜ ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ๋งŒ๋“  ํŒจํ„ด 

 

์ „๋žต์€ ๋ชฉ์ ์„ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์ผ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ์‹, ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™, ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋“ฑ์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

  Strategy:  ์ธํ„ฐํŽ˜์ด์Šค๋‚˜ ์ถ”์ƒํด๋ž˜์Šค๋กœ ์™ธ๋ถ€์—์„œ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ช…์‹œํ•œ๋‹ค.

  ConcreteStrategy1, ConcreteStrategy2, ConcreteStrategy3 : ์ŠคํŠธ๋ž˜ํ‹ฐ์ง€ ํŒจํ„ด์—์„œ ๋ช…์‹œํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‹ค์ œ๋กœ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค

  Context: ์ŠคํŠธ๋ž˜ํ‹ฐ์ง€ ํŒจํ„ด์„ ์ด์šฉํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰, ํ•„์š”์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ๊ตฌ์ฒด์ ์ธ ์ „๋žต์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋„๋ก  setter๋ฉ”์„œ๋“œ ์ œ๊ณต 

 

์ •์ธ์ƒ, ์ฑ„ํ™์„ JAVA ๊ฐ์ฒด ์ง€ํ–ฅ ๋””์ž์ธ ํŒจํ„ด, ํ•œ๋น›๋ฏธ๋””์–ด

'๐ŸฐJAVA > Design Pattern' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Factory Method Pattern  (0) 2022.07.05
Singleton Pattern  (0) 2022.06.21
[ Object-Oriented Programming ] ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ  (0) 2022.01.24
Comments