Strategy Pattern
Last updated
Last updated
μΌλΆλ₯Ό μμ νμ λ μ 체λ₯Ό μ»΄νμΌ/λΉλν΄μΌ νλ μννΈμ¨μ΄λ₯Ό κ°λ°νλ κ²μ μ₯κΈ°μ μνμΌλ‘ μ΄μ΄μ§λ€. λ°λΌμ λ³κ²½μ μν μ€κ³λ₯Ό ν΄μΌ νλ€.
μ΄λ λ€μμ μν΄ μ΄λ£¨μ΄μ§λ€.
μΆμμ μΈ κ²(μΈν°νμ΄μ€)μ μμ‘΄νκ³ , ꡬ체μ μΈ κ²(ꡬνλ¬Ό)μ μμ‘΄νμ§ λ§μμΌ νλ€.
μμ(extend)보λ€λ μ§ν©(aggregation, λ΄λΆμ fieldλ‘ ν¬ν¨νλ κ²)μ μ μ©ν΄μΌ νλ€.
μ€κ³ μ λ³ν λΆλΆκ³Ό λ³νμ§ μμ λΆλΆμ μ λΆλ¦¬ν΄μΌ νλ€.
μ¬μ€κ³μ μμΈμ΄ 무μμΌμ§μ μ΄μ μ λλ€.
μμ£Ό λ³νλ κ°λ μ μΊ‘μννλ€.
μ€νΈλν°μ§ ν¨ν΄
μ΄λ, λ³νλ μκ³ λ¦¬μ¦ ν¨λ°λ¦¬λ₯Ό μ μνκ³ κ°κ°μ μΊ‘μνν λ€, μ΄λ₯Ό λ€λ₯Έ ν΄λμ€κ° ν¬ν¨νκ² λ§λλ μ€κ³ κΈ°λ²μ΄λ€.
μ€νΈλν°μ§ ν¨ν΄
μ λμΌν λ¬Έμ λ₯Ό λ€λ£¨λ μ¬λ¬ μκ³ λ¦¬μ¦μ΄ νλμ μΈν°νμ΄μ€(Strategy)λ₯Ό ꡬννλλ‘ νμ¬, νμν μκ³ λ¦¬μ¦μΌλ‘ μ½κ² λ체ν μ μλλ‘ νλ€.
Context
- μ λ΅μ μ΄μ©νλ κ°μ²΄. μ λ΅μ κ΅μ²΄νκΈ° μν setter λ©μλλ₯Ό κ°μ§λ€.
Strategy
- μΈλΆλ‘λΆν° λμΌν λ°©μμΌλ‘ μκ³ λ¦¬μ¦(μ λ΅)μ νΈμΆν μ μλλ‘ νκΈ° μν μΈν°νμ΄μ€/μΆμ ν΄λμ€
ConcreteStrategy
- ꡬ체μ μκ³ λ¦¬μ¦λ€μ΄ μ μλλ ν΄λμ€
λ¨μ ν μ€νΈμμ νΉμ μ»΄ν¬λνΈ(λ―Έκ°λ°)μ ν μ€ν νκ³ μ ν λ μΌλ¨ Stubμ μ΄μ©νκ³ μ΄ν κ°λ°λ κ²μΌλ‘ λ체νκΈ° μν΄ μ΄ ν¨ν΄μ μ¬μ©ν μ μλ€.