곡μ νμ΄μ§ 리λ΄μΌ νλ‘μ νΈμμ 곡μ νμ΄μ§ λ΄μ μ¬λ¬ λΈλ‘λ€μ΄ μκ³ κ° λΈλ‘λ€μ λλκ·Έμ€λλ‘ κ°λ₯ μ λ¬΄λ‘ λΆλ₯λλ€.
μμ μ μ½λ
κ°μ²΄λ₯Ό λμ μΌλ‘ κ΄λ¦¬νκΈ° μν΄ μ²μμλ switch case λ¬ΈμΌλ‘ κ°λ°νμλ€. μ¬κΈ°μ blockTypeμ΄ μΆκ°/μμ λ κ²½μ° Serice ν΄λμ€μ μ½λκ° λ³κ²½λμ΄μΌ νκΈ° λλ¬Έμ OCPμ μλ°°λλ μ μ§λ³΄μμ±μ΄ μ’μ§ μμ μ½λμ΄λ€. λν μ€ν μ€ blockTypeμ κ΅μ²΄κ° λΉλ²νκ² λ°μνμ¬ μ λ΅ ν¨ν΄μ μ΄μ©ν΄ μ½λλ₯Ό κ°μ νκΈ°λ‘ νλ€.
π½ μ λ΅ ν¨ν΄μ μ νν μ΄μ
[Java] μ λ΅ ν¨ν΄ vs ν νλ¦Ώ λ©μλ ν¨ν΄ vs μν ν¨ν΄
νλ‘μ νΈμμ λ°νμ μ κ°μ²΄λ₯Ό λμ μΌλ‘ κ΄λ¦¬νκ³ , OCPλ₯Ό λ§μ‘±νλ μ½λλ‘ κ°μ νκΈ° μν΄ λμμΈ ν¨ν΄μ κ³ λ €ν κ³Όμ μ κΈ°λ‘νμλ€. 1. μ λ΅ ν¨ν΄ vs ν νλ¦Ώ λ©μλ ν¨ν΄ ν νλ¦Ώ λ©μλ ν¨ν΄μ
miyeonlee.tistory.com
μ λ΅ ν¨ν΄(Strategy Pattern)μ΄λ?
μ€ν(λ°νμ) μ€μ μκ³ λ¦¬μ¦ μ λ΅μ μ ννμ¬ κ°μ²΄ λμμ λμ μΌλ‘ λ°λλλ‘ ν μ μλ νμ λμμΈ ν¨ν΄μ΄λ€.
μ¬κΈ°μ μ λ΅μ΄λ, μΌμ’ μ μκ³ λ¦¬μ¦μ΄ λ μ λ μκ³ κΈ°λ₯μ΄λ λμμ΄ λ μ λ μλ, νΉμ ν λͺ©νλ₯Ό μννκΈ° μν νλ κ³νμ λ§νλ€.
μ¦, μ΄λ€ μΌμ μννλ μκ³ λ¦¬μ¦μ΄ μ¬λ¬ κ°μ§μΌ λ λμλ€μ 미리 μ λ΅μΌλ‘ μ μν¨μΌλ‘μ¨ μμ½κ² μ λ΅μ κ΅μ²΄ν μ μκ³ μκ³ λ¦¬μ¦ λ³νμ΄ λΉλ²νκ² νμν κ²½μ°μ μ ν©ν ν¨ν΄μ΄λ€.
λμμΈ ν¨ν΄μ΄λ
λ°λ³΅μ μΌλ‘ λνλ λ¬Έμ μ λν΄ κ·Έκ²μ ν΄κ²°ν κ²½ν λ° λ Έν루λ₯Ό μΆμ νμ¬ μ¬μ΄μ©νκΈ° μ’μ ννλ‘ μ΄λ¦μ λΆμ¬ ν΄λ²μ μ μνλ ν¨ν΄ μμ
μ λ΅ ν¨ν΄μ μ μ©νκΈ° μν΄μλ μλμ κ°μ λ¨κ³λ₯Ό λ°λ₯Έλ€.
β λ³κ²½λλ κ²κ³Ό λ³κ²½λμ§ μλ κ²μ μ격νκΈ° ꡬλΆνλ€.
β‘ λ λͺ¨λμ΄ λ§λλ μ§μ μ μΈν°νμ΄μ€λ₯Ό μ μνλ€. (λ³νλ κ²μ λν μΆμν, μΊ‘μν)
⒠ꡬνμ μμ‘΄νκΈ° λ³΄λ€ μ μν μΈν°νμ΄μ€μ μμ‘΄νλλ‘ μ€κ³νλ€.
Context : λ³κ²½λμ§ μλ κ², μ λ΅ ν¨ν΄μ μ΄μ©νλ μν μ νκ³ DIλ₯Ό ν΅ν΄ λμ μΌλ‘ μ λ΅μ λ³κ²½νλ€.
Strategy : μΈλΆμμ λμΌν λ°©μμΌλ‘ μκ³ λ¦¬μ¦μ νΈμΆνλ λ°©λ²μ λͺ μν΄μ€λ€.
ConcreateStrategy : λ³κ²½λλ κ², Strategyμμ λͺ μν μκ³ λ¦¬μ¦μ ꡬνν ν΄λμ€
μ λ΅ ν¨ν΄ μ μ©
1) λμΌ κ³μ΄μ μκ³ λ¦¬μ¦ κ΅°μ μ μνκ³ , κ° μκ³ λ¦¬μ¦μ μΊ‘μν
- μμ κ°μ΄ νμμ λν μ λ΅ ν΄λμ€(ListBlockStrategy, WallInfoBlockStrategy λ±)λ₯Ό μμ±νκ³
- μ μ¬ν νμλ€μ μΊ‘μννλ μΈν°νμ΄μ€(FixBlockStrategy, MoveBlockStrategy)λ₯Ό μ μνμλ€.
2) μ λ΅ ν΄λμ€λ€μ μμ±νκ³ κ΄λ¦¬νλ ν΄λμ€ μμ±
- μ λ΅μ λν ν©ν 리 ν΄λμ€(BlockStrategyFactory)λ₯Ό μ μνκ³ , μ΄ ν΄λμ€μ μ λ΅μ μ€μ νλ λ©μλ(findMoveBlockStrategy, findFIxBlockStrategy)λ₯Ό μ μνμλ€.
- μΊ‘μνν μΈν°νμ΄μ€(FixBlockStrategy, MoveBlockStrategy)λ₯Ό μμν μ λ΅ κ°μ²΄λ₯Ό ν©ν 리 ν΄λμ€μ μ£Όμ λ°μμ μ λ΅λ€μ λ΄λ λ³μ(moveBlockStrategies, fixBlockStrategies)κ° μ΄κΈ°νλλ€.
- μ λ΅μ μ€μ νλ λ©μλλ€(findMoveBlockStrategy())μ BlockStrategyName(enum)μ μΈμλ‘ λ°μμ Mapνμ μ moveBlockStrategies λ³μμμ λ§€νλλ κ°μ²΄λ₯Ό 리ν΄νλ€.
μ΄λ κ² μ λ΅λ§ λ°κΏμ€μΌλ‘μ¨ κ°μ²΄λ₯Ό λμ μΌλ‘ λ°κΏ μ μλ€.
3) μ λ΅λ€μ μνΈ κ΅νμ΄ κ°λ₯νλλ‘ μ€κ³
μμ κ°μ΄ Service ν΄λμ€μμ BlockStrategyFactory κ°μ²΄λ₯Ό μμ‘΄μ± μ£Όμ λ°λλ€.
findFixBlockStrategy()λ©μλλ₯Ό ν΅ν΄ μ λ΅ κ°μ²΄λ₯Ό μ°Ύκ³ , ν΄λΉ κ°μ²΄(MoveBloackStrategyλ₯Ό ꡬνν μ λ΅ ν΄λμ€λ€ μ€)μ createFixBlockDTO()κ° νΈμΆλλ€.
μ 리
μ λ΅ν¨ν΄μ μ μ©νλ©΄ OCP(κ°λ°© νμ μμΉ)μ μ§μΌμ μ€κ³ν μ μλ€.
μ λ΅μ΄ μΆκ°λλλΌλ Service ν΄λμ€μ μ½λλ μμ λμ§ μκ³ ν΄λΉ λΈλ‘μ μ λ΅ ν΄λμ€λ§ μμ±νλ©΄ λκΈ° λλ¬Έμ OCPμμΉμ λ°λ₯΄κ³ ,
λν μμ μ½λμμλ BlockStrategyFactoryλ λ€μν μ λ΅ ν΄λμ€λ€μ μμ± λ° κ΄λ¦¬νλ μ± μμ μ§κ³ Service ν΄λμ€λ λΉμ¦λμ€ λ‘μ§μ μ²λ¦¬νλ μ± μλ§μ κ°κ² λλ©΄μ κ° ν΄λμ€λ νλμ μ± μλ§ κ°μ§λ€λ λ¨μΌ μ± μ μμΉμ λ°λ₯΄κ² λλ€.
π μ°Έκ³ λ§ν¬
π μ λ΅(Strategy) ν¨ν΄ - μλ²½ λ§μ€ν°νκΈ°
Strategy Pattern μ λ΅ ν¨ν΄μ μ€ν(λ°νμ) μ€μ μκ³ λ¦¬μ¦ μ λ΅μ μ ννμ¬ κ°μ²΄ λμμ μ€μκ°μΌλ‘ λ°λλλ‘ ν μ μκ² νλ νμ λμμΈ ν¨ν΄ μ΄λ€. μ¬κΈ°μ 'μ λ΅'μ΄λ μΌμ’ μ μκ³ λ¦¬μ¦μ΄ λ μ
inpa.tistory.com
[λμμΈν¨ν΄] μ λ΅ ν¨ν΄ ( Strategy Pattern )
μ λ΅ ν¨ν΄ ( Strategy Pattern )κ°μ²΄λ€μ΄ ν μ μλ νμ κ°κ°μ λν΄ μ λ΅ ν΄λμ€λ₯Ό μμ±νκ³ , μ μ¬ν νμλ€μ μΊ‘μν νλ μΈν°νμ΄μ€λ₯Ό μ μνμ¬,κ°μ²΄μ νμλ₯Ό λμ μΌλ‘ λ°κΎΈκ³ μΆμ κ²½μ° μ§μ
victorydntmd.tistory.com