๊ฐ์ฒด์ ํ์๋ฅผ ๋ฐ๊พธ๊ณ ์ถ์ ๊ฒฝ์ฐ '์ง์ ' ์์ ํ์ง ์๊ณ ์ ๋ต์ด๋ผ ๋ถ๋ฅด๋ '์บก์ํํ ์๊ณ ๋ฆฌ์ฆ'์ ์ปจํ ์คํธ ์์์ ๋ฐ๊ฟ์ฃผ๋ฉด์ ์ํธ ๊ต์ฒด๊ฐ ๊ฐ๋ฅํ๊ฒ ๋ง๋๋ ํจํด์ด๋ค.
*์ปจํ ์คํธ : ์ํฉ, ๋งฅ๋ฝ, ๋ฌธ๋งฅ์ ์๋ฏธํ๋ฉฐ ๊ฐ๋ฐ์๊ฐ ์ด๋ค ์์ ์ ์๋ฃํ๋ ๋ฐ ํ์ํ ๋ชจ๋ ๊ด๋ จ ์ ๋ณด
์์)
๋์ผ ๊ณ์ด์ ์๊ณ ๋ฆฌ์ฆ(๊ฑท๊ฑฐ๋ ๋ฐ๋ ๋ฑ์ ์ด๋ ๋ฐฉ์ ๊ณ์ด)์ ์ ์ํ๊ณ , ์ด๋ค์ 'Move Strategy'๋ผ๋ ์ด๋ฆ์ผ๋ก ์บก์ํํด์ ์ด๋ค ์ฌ์ด์ ์ํธ ๊ตํ์ด ๊ฐ๋ฅํ๋๋ก ํ๋ค. ์ฆ, ๊ฑธ์ด๊ฐ๋ ๋ฌผ์ฒด๊ฐ ๋ฐ์ด๊ฐ๊ธฐ๋ ํ๊ณ , ๋ฐ์ด๊ฐ๋ ๋ฌผ์ฒด๊ฐ ๋ ์๊ฐ๊ธฐ๋ ํ๊ฒ๋ ์ด๋ ์ ๋ต์ ๋ณ๊ฒฝํ ์ ์๋๋ก ํ๋ ๊ฒ์ด๋ค.
Robot ์ด๋ผ๋ ์ถ์ ํด๋์ค๋ฅผ ์ ์ธํด์, ๊ฑท๊ธฐ ๋ก๋ด(WalkingRobot), ๋ฐ๊ธฐ ๋ก๋ด(RunningRobot), ๋ ๊ธฐ ๋ก๋ด(FlyingRobot) ํด๋์ค๊ฐ Robot ํด๋์ค๋ฅผ ์์๋ฐ๊ฒ ํ๋ค. ํด๋น ๋ก๋ด์ด ํ์ํ ๋๋ง๋ค Main ํจ์์์ ์์ฑํ๊ณ ์คํํ๋ค.
์ด์ด์ ๋ก๋ด์ ์จ๋ ์กฐ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ธฐ๋ก ํ๋ค.
Robot ์ถ์ ํด๋์ค์๋ temperature() ์ถ์ ๋ฉ์๋๋ฅผ ์ ์ธํ๊ณ , ํ์ ํด๋์ค์ ์ฐจ๊ฐ์ด ์จ๋ ์กฐ์ ๊ธฐ๋ฅ์ด ์๋ ๊ฑท๊ธฐ ๋ก๋ด(ColdWalkingRobot), ๋ฐ๋ปํ ์จ๋์กฐ์ ๊ธฐ๋ฅ์ด ์๋ ๊ฑท๊ธฐ ๋ก๋ด(WarmWalkingRobot) ๋ฑ์ผ๋ก ํด๋์ค๋ฅผ ์ ์ธํ๋ค.
๊ทธ๋งํผ ํด๋์ค์ ๊ฐ์๊ฐ ๋ง์์ก๋ค.
ํ์ง๋ง, ์ด๋ฌํ ๋ฐฉ์์ ์ฌ๋ฌ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
์ฒซ ๋ฒ์งธ๋ก, ๋ฉ์๋์ ์์ ์ด ์ด๋ ต๋ค.
์๋ฅผ ๋ค์ด ๊ฑท๊ธฐ ๋ก๋ด์ move() ๋ฉ์๋๋ฅผ '๋น ๋ฅด๊ฒ ๊ฑธ์ด์ ๋ฐฐ๋ฌํฉ๋๋ค ์-๋น '์ ์ถ๋ ฅํ๋ ๋ฉ์๋๋ก ๋ณ๊ฒฝํ๊ณ ์ถ์ ๊ฒฝ์ฐ, ๋ชจ๋ ๊ฑท๊ธฐ ๋ก๋ด ํด๋์ค๋ฅผ ์ํํ๋ฉด์ ๋ฉ์๋๋ฅผ ๋ณ๊ฒฝํด์ค์ผ ํ๋ค.
๋ ๋ฒ์งธ๋ก, ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ธฐ๊ฐ ์ด๋ ต๋ค.
์๋ฅผ ๋ค์ด ๋ก๋ด์ ๋งํ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๊ฒฝ์ฐ, Robot ์ถ์ํด๋์ค์ Speak() ์ด๋ผ๋ ์ถ์ ๋ฉ์๋๋ฅผ ์ ์ธํ๊ณ , ์์ด๋ฅผ ํ๋ ์ฐจ๊ฐ์ด ์จ๋ ์กฐ์ ๊ธฐ๋ฅ์ด ์๋ ๊ฑท๊ธฐ ๋ก๋ด(EnglishColdWalkingRobot), ํ๊ตญ์ด๋ฅผ ํ๋ ๋ฐ๋ปํ ์จ๋ ์กฐ์ ๊ธฐ๋ฅ์ด ์๋ ๊ฑท๊ธฐ ๋ก๋ด(KoreanWarmWalkingRobot),.. ์์ผ๋ก ์ ์ธํด์ผ ํ๋ค. ๊ทธ๋ฌ๋ฉด ๊ธฐ๋ฅ์ ๋ฐ๋ผ ํ์ ํด๋์ค์ ๊ฐ ์๊ฐ ๊ธฐํ๊ธ์์ ์ผ๋ก ๋์ด๋ ์ ์๋ค.
์ด๋ฌํ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ์ต์ ํ๋ ํจํด์ด '์ ๋ต ํจํด(Strategy Pattern)'์ด๋ค!
์์์ ๋ณด์ฌ์ค ๋ก๋ด ์ฝ๋๋ฅผ ์ ๋ต ํจํด์ผ๋ก ์์ ํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
์ ์ฝ๋์์ ์ด๋ ์ ๋ต์ ๋ํ๋ด๋ 'MoveStrategy' ์ธํฐํ์ด์ค ๋ฐ์ ๊ฑท๊ธฐ(Walk), ๋ฐ๊ธฐ(Run) ๋ฑ๊ณผ ๊ฐ์ ์ด๋ ์ ๋ต์ ๋ํ๋ด๋ ํ์ ํด๋์ค๋ฅผ ์ ์ธํ๋ค.
๊ทธ๋ฆฌ๊ณ , ์จ๋ ์กฐ์ ์ ๋ต์ ๋ํ๋ด๋ 'TemperatureStrategy' ์ธํฐํ์ด์ค ๋ฐ์ Cold, Warm๊ณผ ๊ฐ์ ์จ๋ ์กฐ์ ์ ๋ต์ ๋ํ๋ด๋ ํ์ ํด๋์ค๋ฅผ ์ ์ธํ๋ค.
์ด๋ฅผ ํตํด ์์์ ๊ฐ์ ๊ณ์ด์ ์๊ณ ๋ฆฌ์ฆ๋ค์ ์บก์ํํ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ , Robot์ ์์ฑํ ๋, ์ด๋ ๋ฐฉ๋ฒ๊ณผ ์จ๋ ์กฐ์ ๋ฐฉ๋ฒ์ ํจ๊ป ์ ๋ ฅํด์ ์์ฑํ Robot์ ๊ฐ๊ฐ์ ์ด๋ ์ ๋ต๊ณผ ์จ๋ ์กฐ์ ์ ๋ต์ ์คํํ๊ฒ ๋๋ค.
์ด๋ฌํ ์ ๋ต ํจํด ๊ธฐ๋ฐ์ ๊ตฌํ ๋ฐฉ๋ฒ์ ์์ ์ฝ๋์์ ๋ฐ์ํ๋ ๋ฌธ์ ์ ๋ค์ ํด๊ฒฐํ ์ ์๋ค.
์ฒซ ๋ฒ์งธ๋ก ๋ฉ์๋๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ํด์ ํด๋นํ๋ ๋ชจ๋ ํด๋์ค๋ฅผ ๋ชจ๋ ์ํํ๋ฉด์ ๋ฉ์๋๋ฅผ ๋ณ๊ฒฝํด์ค์ผ ํ๋ ๋ฐ๋ฉด์, ์ ๋ต ํจํด์ ์ด์ฉํ ์ ์ฝ๋์์ ๋ณ๊ฒฝํ๊ณ ์ ํ๋ ํด๋์ค์ ๋ฉ์๋ ํ๋๋ง ๋ณ๊ฒฝํด์ฃผ๋ฉด ๋๋ค.
์๋ฅผ ๋ค์ด, ์์ ์ฝ๋์์ WalkingRobot์ ๋ฉ์๋๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ถ๋ค๋ฉด ColdWalking, WarmWalking ๋ฑ ๋ชจ๋ WalkingRobot ํด๋์ค๋ฅผ ์ํํ๋ฉด์ ๋ณ๊ฒฝํด์ค์ผ ํ๋ ๋ฐ๋ฉด์, ์ ๋ต ํจํด ๊ธฐ๋ฐ์ ์ ์ฝ๋์์ MoveStrategy๋ฅผ ์์๋ฐ๋ Walk ํด๋์ค์ ๋ฉ์๋ ํ๋๋ง ๋ณ๊ฒฝํด์ฃผ๋ฉด ๋๋ค.
๋ ๋ฒ์งธ๋ก ์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐํ๊ธฐ ์ํด์ ํ์ ํด๋์ค์ ๊ฐ์๋ฅผ ๋ง์ด ๋๋ ค์ผ ํ๋ ๋ฐ๋ฉด์,
์ ๋ต ํจํด์ ์ด์ฉํ ์ ์ฝ๋์์ ์๋ก์ด ์ธํฐํ์ด์ค์ ํด๋น ์ธํฐํ์ด์ค๋ฅผ ์์๋ฐ์ ์๋ก์ด ๊ธฐ๋ฅ์ ํ์ํด๋์ค๋ค์ ์ ์ธํด์ฃผ๊ณ , Robot ํด๋์ค์ ์๋ก์ด ๊ธฐ๋ฅ ํจ์์ ๋ง์ถ์ด ์์ ํ ๋ค์, Robot ์์ฑ ์ ์ด๋ ์ ๋ต, ์จ๋ ์กฐ์ ์ ๋ต, ์๋ก์ด ๊ธฐ๋ฅ ์ ๋ต์ ํจ๊ป ์ ๋ ฅํด์ฃผ๋ฉด ๋๋ค.
๋งํ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ๊ฒฝ์ฐ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ค.
๋, ์ ๋ต ํจํด์ ์์ฑํ๋ ค๋ฉด ํ ์ ๋ต ์์ ์๊ณ ๋ฆฌ์ฆ๋ค์ด ์ํธ ๊ต์ฒด๊ฐ ๊ฐ๋ฅํ๋๋ก ํด์ผ ํ๋ค!
์ด๋ฅผ ๊ตฌํํ๊ธฐ ์ํด์ Robot ํด๋์ค์ Setter๋ฅผ ์ถ๊ฐํด์ค๋ค. ์ฐจ๊ฐ์ด ์จ๋ ์กฐ์ ๊ธฐ๋ฅ์ด ์๋ ๊ฑท๊ธฐ ๋ก๋ด์ Setter๋ฅผ ์ด์ฉํด์ ์ฐจ๊ฐ์ด ์จ๋ ์กฐ์ ๊ธฐ๋ฅ์ด ์๋ ๋ ๊ธฐ ๋ก๋ด์ผ๋ก ๊ต์ฒด๊ฐ ๊ฐ๋ฅํ๋ค.
์ด๋ ๊ฒ ํ๋ฉด ํธ๋ฆฌํ๊ฒ ๊ฐ์ฒด์ ํ์๋ฅผ ์ํธ ๊ต์ฒดํ ์ ์๋ ์ ๋ต ํจํด์ด ์์ฑ๋๋ค.
'CS > ๋์์ธ ํจํด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋์์ธ ํจํด] ํ๋ก์ ํจํด(Proxy Pattern)๊ณผ ํ๋ก์ ์๋ฒ(Proxy Server) (0) | 2023.08.03 |
---|---|
[๋์์ธ ํจํด] ์ต์ ๋ฒ ํจํด(Observer Pattern) (0) | 2023.08.02 |
[๋์์ธ ํจํด] ํฉํ ๋ฆฌ ํจํด(Factory Pattern) (0) | 2023.08.01 |
[๋์์ธ ํจํด] ์ฑ๊ธํค ํจํด(Singleton Pattern) (0) | 2023.08.01 |
[๋์์ธ ํจํด] SOLID ์์น (0) | 2023.08.01 |