[숫자 야구] 피드백 반영 - 메서드 복잡도 낮추기(1)

2024. 10. 5. 12:51내일배움캠프/Numbers Baseball

 피드백 사항 첫 번째는 현재 'NumbersBaseballApp' 클래스에 존재하는 'start()' 메서드 로직의 복잡도 문제였다. 실제로 작성해둔 코드를 다시 보니 만약 주석처리한 내용을 없앤다면 알아보기 힘들 정도로 각 메서드의 로직이 복잡하였다. 그래서 이번에는 이 복잡도 문제를 해결해 보고자 한다. 또한 피드백을 반영하며 수정한 부분에 주석을 제거해 반영 후 로직의 복잡도 문제가 나아졌는지 확인했다. 피드백을 반영한 코드는 여기서 확인이 가능하다.

 

'start()' 메서드는 '사용자' 의 메뉴 선택에 따른 수행 로직을 가지고 있다. '시작 메뉴' 를 보여주고 메뉴 번호를 입력 받아 메뉴 번호에 해당하는 로직을 수행한다. 그리고 'boolean' 을 반환해 게임을 재시작 여부를 'Main.main()' 메서드에 알린다.

 

먼저 '시작 메뉴' 의 특정 메뉴를 선택하는 로직을 따로 'selectMenu()' 로 아래와 같이 분리했다. 해당 메서드는 '메뉴 번호' 가 유효할 때까지 반복적으로 입력을 받고 유효한 입력 값을 반환해 준다.

NumbersBaseballApp.selectMenu() 메서드

 

두 번째로 기존에는 'if()' 문을 여러개 나열해 입력한 메뉴에 해당하는 로직이 수행되도록 했는데, 이것은 로직의 복잡도를 올리기도 하지만 작성된 'if()' 문을 전부 확인하게 되기에 좋지 않은 코드라는 생각이 들었다. 그래서 'if - else if' 문을 사용하기로 했다. 'switch' 의 경우 'case' 의 조건에 사용되는 타입이 제한적이기에 'if - else if' 를 택했다.

수정된 NumbersBaseballApp.start() 메서드 일부

 

이렇게 되면 조건에 맞는 'if()' 문 또는 'else if()' 문을 찾게되면 해당 로직을 수행하고, 전체 'if()' 문을 벗어나기에 다른 조건문의 조건을 비교하는 것을 막을 수 있다.

 

수정된 'start()' 메서드를 확인해보면 주석 없이도 '게임 기록 초기화 - 시작 메뉴 선택 - 메뉴에 따른 기능 수행' 로직을 가지고 있다는 것을 파악할 수 있었다.