Command Query Separation
Important Principle of Imperative Programming
Bertrand Meyerd의 Eiffel 프로그래밍 언어에서 고안되었다
모든 메소드는 한번의 액션에서 상태를 변경하는 커맨드든 데이터를 반환하는 쿼리든 한가지 액션만 취해야 한다는 것
요청에 대한 행동을 할때 대답을 변경하지 말라는 것
다시말해 상태변경과 데이터 반환이 따로 구현되어야 한다는 말이다 get, set 의 이론근간
메소드는 값을 반환할 때 referentially transparent(시스템의 상태를 변경하지 않을 때 함수를 referentially transparent하다고 함)해야 하며 사이드 이펙트를 유발하지 말아야 한다
많이 사용될 수 있으나 이로 인해 가장 흔하게 생기는 문제는 Race Condition
- Query - 결과값을 반환하고, 시스템의 관찰가능한 상태를 변화시키지 않는다. 따라서 부작용에서 자유롭다.(free of side effects)
- command - 결과를 반환하지 않고, 대신 시스템의 상태를 변화시킨다.