작성
·
83
답변 2
0
public int pop() {
if(isEmpty())
throw new Underflow();
return elements[--size];
}
public Integer top() {
if(isEmpty())
throw new Empty();
return elements[size - 1];
}
pop은 내부 상태를 변경(size를 감소시킴)시키고, 값을 반환해서 command이면서 query여서 CQS를 위반하고 있고,
top은 쿼리입니다.
https://github.com/msbaek/stack-example/blob/master/src/main/java/BoundedStack.java
CQS를 준수하는 것은 가독성, 코드 읽는 사람의 기대에 부합하기게 필요한 요건입니다.
CQS를 최대한 준수해야겠지만 간간이 CQS를 준수할 수 없는 상황이 발생합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
Aozora님, 질문 주셔서 감사합니다.
CQS 원칙에 따르면, “커맨드”는 내부 상태를 변경하고 반환값이 없는 반면, “쿼리”는 내부 상태를 변경하지 않으며 값을 반환합니다.
스택의 top
메서드는 값을 반환하므로 쿼리처럼 동작하지만, 실제로 스택의 상태를 변경하지 않는다면 쿼리의 역할을 수행하고 있는 것입니다. 이는 스택의 pop
메서드와는 다르게 내부 구조를 변경하지 않기 때문에 쿼리라고 볼 수 있습니다.
만약 top
메서드가 내부 상태를 변경하지 않으면서 값을 반환한다면 이는 명백히 쿼리에 해당합니다. 그렇지만 예제의 목적과 특정 구현에 따라 다르게 작동할 수 있으므로, 문맥에 맞게 활용하는 것이 중요합니다.
추가적인 정보는 여기 링크를 참조하시면 도움이 될 것입니다.
감사합니다!