inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

클린 코더스: 실전 객체 지향 프로그래밍과 TDD 마스터 클래스

클린 코더스 강의 5. Function Structure Part2

11. Null is not an error의 예제인 top 함수는 커맨드인가요 쿼리인가요??

158

Aozora

작성한 질문수 4

0

안녕하세요. 좋은 강의 감사합니다.
CQS에서 커맨드는 내부 구조를 변경하는데 반환값이 없고, 쿼리가 내부 구조를 변경하지 않고 반환값이 있는 것이라고 설명을 들었습니다.

 

그런데, 11. Null is not an error에서 예제를 든 스택의 top 메소드는 내부 구조를 변경함에는 커맨드 처럼 보입니다만, 값을 반환하므로 쿼리 처럼 행동합니다.

예제라서 그런것인지 아니면 쿼리나 커맨드 둘 중에 하나인지 궁금합니다.

tdd 객체지향 클린-아키텍처 클린코드-기획전

답변 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 인턴

안녕하세요, 인프런 AI 인턴입니다.
Aozora님, 질문 주셔서 감사합니다.

CQS 원칙에 따르면, “커맨드”는 내부 상태를 변경하고 반환값이 없는 반면, “쿼리”는 내부 상태를 변경하지 않으며 값을 반환합니다.

스택의 top 메서드는 값을 반환하므로 쿼리처럼 동작하지만, 실제로 스택의 상태를 변경하지 않는다면 쿼리의 역할을 수행하고 있는 것입니다. 이는 스택의 pop 메서드와는 다르게 내부 구조를 변경하지 않기 때문에 쿼리라고 볼 수 있습니다.

만약 top 메서드가 내부 상태를 변경하지 않으면서 값을 반환한다면 이는 명백히 쿼리에 해당합니다. 그렇지만 예제의 목적과 특정 구현에 따라 다르게 작동할 수 있으므로, 문맥에 맞게 활용하는 것이 중요합니다.

추가적인 정보는 여기 링크를 참조하시면 도움이 될 것입니다.

감사합니다!

진짜화면이랑달라서못해먹겟어요먹겟어요

0

18

1

[영한님]Spring Boot 및 프로젝트 생성

0

48

2

유지보수가 아닌 최초 프로젝트 생성 부터 진행할때

0

31

1

Shape 클래스 실습 코드 피드백 요청드립니다

0

44

2

퀴즈가 안열려요

0

74

2

run() 메서드 안에 지역변수 sum을 사용한 이유

0

82

1

서브에이전트 실행중에도 대기해야 할까요?

0

41

2

강의 화면이 안나와요

0

72

1

중급 과정 학습 중 복습과 진도 진행의 우선순위에 대해 질문드립니다

0

80

1

빠져나오기 위해서 System.in을 닫는다는게 무슨 의민가요??

0

58

1

문제2번

0

64

1

중복 코드와 유지보수성 사이에서 어떤 기준으로 리팩토링해야 할지 궁금합니다

0

50

1

static 변수를 호출할때 인스턴스변수 호출하듯이 호출해도 되나요?

0

73

1

회원 도메인 인터페이스 개발

0

61

1

코드 버그

0

47

1

강의자료

0

53

1

강사님 질문있습니다.

0

59

1

강의 영상 업로드 질문

0

63

2

빈 스코프 개념의 중요성

0

64

1

인텔리제이 설정 최신화 관련 확인 부탁 드립니다!

3

165

2

동일성 동등성

0

53

1

47번 리턴 관련 질문

0

62

1

13강, 책임을 나누는 기준

0

133

1

org.fitness 라이브러리를 어떻게 받을 수 있나요

0

182

2