11. Null is not an error의 예제인 top 함수는 커맨드인가요 쿼리인가요??
133
4 asked
안녕하세요. 좋은 강의 감사합니다.
CQS에서 커맨드는 내부 구조를 변경하는데 반환값이 없고, 쿼리가 내부 구조를 변경하지 않고 반환값이 있는 것이라고 설명을 들었습니다.
그런데, 11. Null is not an error에서 예제를 든 스택의 top 메소드는 내부 구조를 변경함에는 커맨드 처럼 보입니다만, 값을 반환하므로 쿼리 처럼 행동합니다.
예제라서 그런것인지 아니면 쿼리나 커맨드 둘 중에 하나인지 궁금합니다.
Answer 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 메서드가 내부 상태를 변경하지 않으면서 값을 반환한다면 이는 명백히 쿼리에 해당합니다. 그렇지만 예제의 목적과 특정 구현에 따라 다르게 작동할 수 있으므로, 문맥에 맞게 활용하는 것이 중요합니다.
추가적인 정보는 여기 링크를 참조하시면 도움이 될 것입니다.
감사합니다!
싱글턴패턴
0
1
1
환불 요청
0
26
2
Singleton 관련 질문입니다.
1
27
2
코드 자료
0
24
2
질문있습니다
0
25
1
1번 문제 질문입니다.
0
31
1
음악플레이어 문제 중 코드질문
0
26
1
UserService, CertificationService 책임 분리 기준 질문
0
26
1
문제와 풀이4 문제점
0
41
2
문제와 풀이
0
23
1
문제풀이 시간마다 방향성
0
39
2
레이어드 아키텍처에서 도메인 중심 패키지 구조를 적용하거나 변화하는 시점이 있을까요?
1
40
2
LobbyUIController의 백키가 사라졌는데 왜그런건가요?
0
41
2
무조건 타이틀 씬부터 시작해야하나요?
0
41
1
9장 상속 문제와 풀이 질문
0
37
1
BaseUI, UIManager
0
51
3
프로젝트 완성본 문의
0
41
2
POJO에서 Spring Test로 넘어갈 때 누락(해결됨)
0
33
1
섹션 2 퀴즈 9번
0
32
2
질문 디스코드 관련
0
40
1
강의 자료에 사소한 오타가 있습니다.
0
47
2
다형성 개념 문의
1
61
3
13강, 책임을 나누는 기준
0
120
1
org.fitness 라이브러리를 어떻게 받을 수 있나요
0
162
2

