우아한 테크 코스 프리코스 1주차 후기
2020, Nov 27
숫자 야구 게임 ⚾
링크 : https://github.com/lns13301/java-baseball-precourse/tree/lns13301
회고록
-
코드 구현
- 이번 코드를 구현할 때, 요구 사항을 충족하되 나만의 추가적인 약속을 만들었다.
- indent depth <= 1
- indent depth 를 1개까지만 허용하는 부분은 반복문을 모두 재귀 함수로 바꾸어 해결하였다.
- 대신 이와 같이 해결하는 상황 때문에 게임 시작 시 컴퓨터가 생성하는 세 자리 난수를 생성자에서 생성하는 과정에서 인자로 ‘new ArrayList()’를 넣어주어야 하는 부분이 마음에 들지 않았다.
- 그래도 반복문을 최대한 줄임으로써 코드를 보기는 편했다.
- 메소드 길이는 최대한 <= 10
- 그 다음으로 메소드 길이를 최대한 줄여보는 것인데, 이 것은 최대한 기능단위로 분리하는데 도움을 준 것 같다.
- 다만, 기능 단위의 분리는 했지만 클래스 단위의 분리는 아직 미숙한 것 같다.
- 다음 과제부터는 기능 설계하는 단계에서 최대한 클래스를 세분화 해봐야겠다.
- Getter, Setter 사용하지 않기
- Getter, Setter 를 사용하지 않고 프로그램을 구현한 것은 이번이 처음인 것 같다. 값을 넣고 판단해서 결과를 알려주는 방식으로 코딩했다.
- 그러다보니 ‘GameManager’ 클래스에서 대부분의 기능을 수행하게 되었고, 이는 클래스 분리를 하지 못하게 되는 원인이 되었다.
- 기능 단위 분리
- 기능 단위 분리는 쉬운 것 같으면서도 어려웠다.
- 기능으로 생각되는 것은 다 분리하면 된다고 생각했지만 무엇보다도 분리된 기능의 기능 이름을 정하는 것에서 어려움을 느꼈다.
- 클래스 세분화와 동시에 기능을 어떻게 분리할 지 생각하고 기능 단위별 구현할 이름의 공식같은 것을 생각해 봐야겠다.
- 하드 코딩 하지 않기
- ‘OutputView’ 클래스의 메소드를 제외하고 모든 값들은 하드코딩 하지 않고 진행해 보았다.
- 결과적으로 코드를 보기가 수월해졌다.
- 다만, 정적 변수가 많아지면서 코드가 길어지는 느낌이 들어서 다음부터는 enum 을 사용해 보도록 하겠다.
- indent depth <= 1
- 이번 코드를 구현할 때, 요구 사항을 충족하되 나만의 추가적인 약속을 만들었다.
-
느낀점
- 작년 과제는 숫자 야구 게임을 구현하는 것이 미션이었지만, 올해는 특정 기능을 제공하고 해당 기능을 이용하여 구현하는 것에서 차이점이 있었다.
- 그래서 Scanner 부분이 난감했는데, 원래라면 InputView 를 따로 만들어서 사용할 계획이었지만, Main 에 Scanner 를 활용해야하다보니 마땅한 생각이 들지 않아서 Application 에서 기능을 구현하게 되었다.
- 그리고 전체적으로 코드가 한눈에 쉽게 들어오는 느낌이 살짝 부족했기 때문에 다음 미션부터는 클래스 가지는 기능의 수를 줄이고 분리해서 가독성 좋은 코드를 만드는 것을 목표로 해야겠다.
- 코딩을 할 때마다 이전에 만들었던 코드보다 부족한 부분이 어느정도 메꾸어지지만 새롭게 불만족스러운 부분이 생기기 마련인 것 같다.
- 하지만 이러한 과정을 겪기 때문에 성장하는 것이 아닐까?
- 이번 과제보다 더 나은 실력으로 다음 과제에 임하도록 해야겠다.