CQS(Command Query Separation)μ μ΄ν΄λ³΄κΈ° μ μ, νλ₯Ό μ΄μ©νμ¬ Commandμ Queryλ₯Ό λΉκ΅ν΄ λ³΄κ³ CQSμ λν΄μ μ΄ν΄λ³΄μ.
π 1. Command & Query
Command | Query | |
κ°μ²΄μ μνλ₯Ό λ³κ²½νλκ°? | O | X |
κ°μ λ°ννλκ°? | X | O |
μμ | setter λ©μλ | getter λ©μλ |
π 2. CQS
CQS(Command Query Separation)λ κ°μ²΄μ λͺ¨λ λ©μλλ₯Ό Commandμ Query λ κ°μ§λ‘ ꡬλΆνλ€. κ·Έλμ νλμ λ©μλλ λ°λμ Command λλ Query μ€μμ νλμλ§ ν΄λΉν΄μΌ νλ€. μ¦, νλμ λ©μλκ° Command μ΄λ©΄μ λμμ Query μΌμλ μλ€.
CQSμ λͺ©μ μ 컀맨λμ 쿼리λ₯Ό λΆλ¦¬νλ κ²μ΄λ€.
CQSλ₯Ό μ§ν€κ² λλ©΄ query λ©μλμ λν΄μ μΈλΆ μν λ³νκ° λ°μνμ§ μλλ‘ κ°λ°μ νκ² λλ€. κ·Έλ¬λ©΄ query λ©μλλ₯Ό μ¬μ©ν λ, κ°μ λ³κ²½μ μ κ²½ μ°κ±°λ λ©μλμ νΈμΆ μμλ₯Ό κ³ λ €ν΄μΌ νλ λ±μ λΉμ©μ μ€μΌ μ μλ€.
κ·Έλμ κ°μ λ°ννλ κ²½μ°(Query λ©μλ), μ°Έμ‘° ν¬λͺ μ±μ κ°μ§κ³ μ¬μ΄λ μ΄ννΈκ° μλ€κ³ ν μ μλ€.
π 3. CQSμ μ₯μ κ³Ό λ¨μ
π μ₯μ
- 'μ½κΈ°(μ‘°ν)' λ‘μ§κ³Ό 'μ°κΈ°(μμ )' λ‘μ§μ λΆλ¦¬ν μ μλ€.
- 'μ½κΈ°'μ 'μ°κΈ°'κ° λμμ μΌμ΄λμ§ μκΈ° λλ¬Έμ μ±λ₯ μ΅μ νμ λμμ μ€λ€.
- κ°νΈνκ² κ΅¬νν μ μμΌλ©΄μ μ½λμ κ°λ μ±λ λμ¬μ€λ€.
π λ¨μ
- κ°λ°μ νλ€ λ³΄λ©΄ νλμ λ©μλμ λΆκ°νΌνκ² 'μ½κΈ°'μ 'μ°κΈ°'λ₯Ό λμμ ν΄μΌ νλ κ²½μ°κ° μκΈ°κ² λλλ°, CQS ν¨ν΄μ μ μ§νλ€λ λͺ λͺ©μΌλ‘ μ€νλ € κ°λ¨ν μ½λλ₯Ό 볡μ‘νκ² κ΅¬νν΄μΌ νλ κ²½μ°κ° μκΈΈ μλ μλ€.
(stackμ popμ μκ°ν΄ 보면, κ°μ₯ μ΅κ·Όμ push λ κ°μ λ°ννκ³ stackμμλ ν΄λΉ κ°μ μ κ±°νλ€. λ§ν΄ νμΈλ¬λ ν μ μλ ν CQS μμΉμ μ§ν€λ € νκ² μ§λ§ stackμ popκ³Ό κ°μ΄ λ§€μ° μ μ©ν μν©μμλ μΌλ§λ μ§ CQS μμΉμ κΉ¨λ¨λ¦΄ μ€λΉκ° λμ΄μλ€κ³ λ§νλ€. Trade Offλ₯Ό μκ°νκ³ μ μ°ν μ¬κ³ λ‘ μ€κ³νλ©° ꡬννλ κ±Έλ‘ νμ!π₯)
ν΄λΉ κΈμ
Martin Fowler λμ 'CommandQuerySeparation',
yoonpunk λμ 'CQSμ κ΄ν κ³ μ°° (feat. Side Effect, μ°Έμ‘° ν¬λͺ μ± κ·Έλ¦¬κ³ μμ ν¨μ)',
yena1025 λμ 'CQS (Command Query Separation)',
devsun λμ 'CQS - Command Query Separation'
μ μ°Έκ³ νμμ΅λλ€.
'π νλ‘κ·Έλλ°' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
κ³μΈ΅ν μν€ν μ² (Layered Architecture) (0) | 2023.06.27 |
---|---|
κ°μ²΄μ§ν₯ νλ‘κ·Έλλ° vs μ μ°¨μ§ν₯ νλ‘κ·Έλλ° (0) | 2023.06.17 |