2024. 10. 5. 15:54ㆍ내일배움캠프/Numbers Baseball
피드백 사항 두 번째는 현재 'NumbersBaseballApp' 클래스에 존재하는 'playGame()' 메서드 로직의 복잡도 문제와 '불필요한 상태 저장' 에 대한 문제였다. 다시 기존의 코드를 확인해 보니 두 문제는 연관되어 있어 이렇게 함께 피드백을 반영하게 되었다. '불필요한 상태 저장' 을 했기에 '저장된 상태' 를 사용하는 'playGame' 메서드의 로직 또한 덩달아 복잡해진 것이 라 판단했다. 피드백 반영후 주석을 제거해 메서드 복잡도가 줄어들었는지 확인했다. 피드백이 반영된 코드는 여기서 확인이 가능하다.
1. CorrectAnswerGeneratorImpl
먼저 이렇게 생각해봤다. 'CorrectAnswerGenerator' 객체는 정답을 생성해주는 역할을 한다. 그런데 이 객체가 생성된 정답을 가지고 있는 것이 부여한 역할에 적절한가? 답은 "아니다" 였다. 원래 부여한 역할에 맞게 정답을 생성하기만 하면 된다. 그러면 객체에 존재하는 'makeCorrectAnswer()' 메서드는 정답을 생성해 반환하는 기능을 아래와 같이 수행하면 될 것이다.
물론 위 클래스가 구현하는 'CorrectAnswerGenerator' 인터페이스도 수정해 주었다. 그리고 'NumbersBaseballApp.playGame()' 메서드에서는 정답을 생성할 때
위와 같이 'makeCorrectAnswer()' 메서드를 호출해 생성한 정답을 반환받아 'correctAnswer' 변수에 저장한다.
이렇게 해서 생성한 정답(상태)을 'makeCorrectAnswer()' 메서드를 호출한 'playGame()' 메서드 쪽에서 확인할 수 있으며, 'CorrectAnswerGenerator' 객체는 원래 의도한대로 '정답 생성' 이라는 역할만을 수행하게 되었다.
2. CorrectAnswerComparatorImpl
마찬가지로 'CorrectAnswerComparator' 객체 또한 '플레이어가 입력한 값을 정답과 비교' 하는 역할을 가지기에 불필요하게 '비교 결과' 를 가지고 있을 필요가 없다. 그냥 비교한 결과를 반환해주면 되는 것이다.
단, '비교 결과' 는 기본 타입 또는 String 에 저장하기 적절하지 않으므로 아래와 같이 '비교 결과' 를 반환할 때 사용할 DTO 를 추가해 사용하였다.
전달하는 결과들은 중간에 결과가 변경되지 않도록 'final' 을 선언해 '상수' 로 가지고 있게 하였다. 그리고 비교 결과가 정답인지 확인하는 'isCorrectAnswer()' 메서드와 비교 결과를 출력하는 'printResult()' 메서드를 추가 작성했다.
이제 'CorrectAnswerComparatorImpl.compareCorrectAnswer()' 메서드는 비교 결과를 클래스 필드에 저장하지 않는다. 대신 'ComparedResult' 객체를 생성해 반환한다.
CorrectAnswerComparator 객체 또한 원래 의도대로 '정답을 비교' 하는 역할만을 온전히 가지게 되었다.
그리고 'compareCorrectAnswer()' 메서드를 호출하는 'NumbersBaseballApp.playGame()' 메서드는 아래와 같이 수정했다.
먼저 'while' 조건문이 언제 수행되는지 쉽게 파악할 수 있도록 'boolean isNotClear' 를 추가해 'false' 값을 가지게 되면 반복을 종료하도록 수정했으며, 'compareCorrectAnswer()' 메서드를 통해 반환 받은 비교 결과는 'ComparedResult comparedResult' 에 저장했다.
비교 결과(상태)를 해당 메서드 내에서 추적할 수 있어 'isCorrectAnswer()' 메서드를 호출해 정답 길이와 스트라이크 개수가 같은지 비교한다. 같다면 정답을 맞췄으므로 지금까지의 시도 횟수를 게임 기록에 저장하고 'isNotClear' 에 'false' 를 저장해 반복을 탈출한다. 다르다면 비교 결과를 출력해주고 다음 반복을 수행한다.
'내일배움캠프 > Numbers Baseball' 카테고리의 다른 글
[숫자 야구] 피드백 반영 - 메서드 복잡도 낮추기(3) (0) | 2024.10.07 |
---|---|
[숫자 야구] 피드백 반영 - 메서드 복잡도 낮추기(1) (0) | 2024.10.05 |