Computer Science

[CS] CQS - Command Query Separation

퉁그리 2021. 12. 30. 17:23

Betrand Meyer에 의해 개념이 정리된 Command Query Separation(이하 CQS)는 질의(query)와 명령(command)을 정확히 분리하는 것을 목적으로 한다.

 

- query(질의)는 결과값을 반환하고, 시스템의 상태를 변화시키지 않는다. 즉 부작용에서 자유롭다.(free of side effets)

- command(명령)은 결과를 반환하지 않고, 시스템의 상태를 변경한다.

 

기본적으로 이 원칙을 지켜야지만 상황에 따라 예외를 두어야한다.

 

cqs의 예외 중 하나는 stack의 pop이다.
pop함수는 스택의 맨 위의 값을 빼서(command) 반환(query)하는 일까지 병행한다.
cqs를 기본적으로 지키되 필요할 때는 예외를 두는 것이 효율적이다.

 

예를 들어 insert의 경우에는 command에 속하는 함수지만, id를 반환함으로써 필요에 의해 cqs 원칙을 깰 수 있다.

update의 경우는 반환을 하지않거나 리스트를 카운트해 구현할 수 있다.