CQS(Command Query Separation) Pattern 이란?

Su Bak
4 min readJun 14, 2022
Photo by JJ Ying on Unsplash

소프트웨어의 구조를 선택할 때 우리는 많은 조건을 고려하여 선택하게 됩니다. 시스템의 복잡성, 사용성, 확장성, 성능 등등이 그 조건들에 들어가죠.

이런 여러 조건들을 만족시키기 위해 현재까지 많은 사람들이 고민하고 개발한 결과로 디자인 패턴이란 것이 등장하였습니다.

사실 디자인 패턴이란 것이 그리 거창한 것이 아니고 목적에 맞는 소프트웨어를 개발하던 중에 이런 특정 패턴으로 개발을 하니 복잡성을 줄이고 재사용성 등등이 좋아지는 것을 여러 개발자들이 여러 소프트웨어를 개발하면서 발견을 했고 이런 패턴을 디자인 패턴이라고 부르게 된 것이죠.

디자인 패턴에는 여러 가지가 있지만 이 글에선 CQS 디자인 패턴을 소개해보고자 합니다.

CQS(Command Query Separation) Pattern은 소프트웨어 디자인 패턴 중에 하나로, 모든 객체의 메소드작업을 수행하는 command, 데이터를 반환하는 query, 이렇게 2개로 구분하는 디자인 패턴입니다.

단, 여기서 중요한 점은 하나의 메소드가 command이면서 query일 수는 없고 command와 query 둘 중 하나에만 속해야 한다는 점입니다.

Command

앞서 command를 작업을 수행하는 메소드라고 정의했는데요. command는 객체의 내부 상태를 바꾸지만 값을 반환하지는 않습니다.

뭔가 익숙한 느낌이 드시지 않나요? JavaScript로 예를 들자면 setter가 바로 command 입니다.

아래 예시를 보시면 Person 객체에 command(set name)를 사용해서 Person 객체 내부 상태에 _name을 설정한 것을 볼 수 있습니다.

class Person {
set name(n) {
this._name = n;
}
}
const p = new Person();
p.name = “Lisa”;
console.log(p); // Person {_name: “Lisa”}

이 예시에서 중요한 점은 Person 객체에 내부 상태를 변경했지만 값을 반환하지는 않는다는 점입니다.

Query

--

--

Su Bak

Backend Developer. Mainly use JavaScript but try not to have language constraints. Always trying to acquire new knowledge