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 - 결과를 반환하지 않고, 대신 시스템의 상태를 변화시킨다.
Command와 Query, CQS 알아보기
아는 사람은 알지만, 나는 프로그래밍 교육 기관에서 조교, 코칭 일을 적잖이 했다. 아무래도 요즘 프로그래밍 입문을 파이썬으로 많이 하다보니 파이썬을 공부하는 내가 설 자리가 있었던 것 같다. 그래서 프로그래밍을 처음 하는 사람들에게 변수, 할당, 함수 등 초보적인 개념부터 설명할 일이 많았는데 특히 함수를 공부할 때 list.sort()와 sorted()처럼 비슷한 일을 하는데 구체적인 동작은 다른 형태에 대해 많은 코칭이 필요했다.
https://shoark7.github.io/programming/knowledge/command-and-query-method

CQS - Command Query Separation
Language/IT devsun 2015. 7. 20. 19:07 Command-query separation (CQS)는 컴퓨터 프로그래밍에서 반드시 지켜야 할 원칙이다. 이것은 Bertrand Meyerd의 Eiffel 프로그래밍 언어에서 고안되었다. 모든 메소드는 한번의 액션에서 상태를 변경하는 커맨드든 데이터를 반환하는 쿼리든 한가지 액션만 취해야 한다는 것이다. 다시 말하자면 질문을 할때 대답을 변경하지 말라는 것이다.
https://opennote46.tistory.com/167

Command-query separation - Wikipedia
Command-query separation ( CQS) is a principle of imperative computer programming. It was devised by Bertrand Meyer as part of his pioneering work on the Eiffel programming language. It states that every method should either be a command that performs an action, or a query that returns data to the caller, but not both.
https://en.wikipedia.org/wiki/Command%E2%80%93query_separation

Seonglae Cho