본문 바로가기
개발 활동/우테코 프리코스

늦었지만 우테코 프리코스 회고 - 3주차

by 다음에바꿔야지 2024. 4. 9.

2주차에서는 레이싱 게임을 구현하면서 '전략 패턴'이라는 디자인 패턴을 도입해보았다.

어떤 전략을 선택하느냐에 따라 객체의 행동이 달라지는 개념인데 처음 적용해본 새로운 개념이라 배우기 재밌었다.

 

2주차 이후에도 역시 공통 피드백을 받았다.

 

<2주차 피드백 간략 내용 정리>

1. README.md를 상세히 작성한다

2. 기능 목록을 재검토한다(구현해야 할 기능 목록을 정리하는 데 집중, 정상적인 경우도 중요하지만, 예외적인 상황도 정리)

3. 기능 목록을 업데이트한다(살아있는 문서)

4. 값을 하드 코딩하지 않는다

5. 구현 순서도 코딩 컨벤션이다

6. 변수 이름에 자료형은 사용하지 않는다

7. 한 함수가 한 가지 기능만 담당하게 적절히 분리한다

8. 함수가 한 가지 기능을 하는지 확인하는 기준(15라인)을 세운다

9. 테스트를 작성하는 이유에 대해 본인의 경험을 토대로 정리해본다

10. 처음부터 큰 단위의 테스트를 만들지 않는다

 

 

<3주차 목표>

- 클래스(객체)를 분리하는 연습
- 도메인 로직에 대한 단위 테스트를 작성하는 연습

 

<3주차 회고>

3주차는 로또를 구현했다. 아쉬웠던 점과 좋았던 점이 있었다.

출력 부분에서 ‘로또 번호가 3개 일치할때’부터 출력해야했고, 상금과 맞힌 로또의 갯수를 출력해야했는데, 추후 확장성을 고려하여 구현하다보니 생각보다 복잡하게 진행되었다. 상금은 맞힌 숫자의 갯수에 따라 상금을 보여주는 Enum클래스를 사용하여 적절히 잘 표현했던 것 같다.

최종 당첨 결과 출력 부분에서 각 등수별로 갯수를 누적해서 저장해야했기 때문에 Map자료 구조를 사용했다. Map을 사용해 구현을 하다보니 익숙치 않아서 그런지 코드의 복잡도가 올라간게 느껴졌다. 조금 더 단순화할 수 없을까 고민했고, 출력문을 메서드로 나눠 복잡도를 줄여보았다. 이 부분을 더 쉽게 표현할 수 있는 방법이 있을 것 같아 추후 프리코스 참여자들과 코드 리뷰를 통해 다른 참여자들은 어떻게 구현했는지 스터디해볼 계획이다.

객체를 설계할때 충분히 고민했다고 생각했지만, 제출 코드를 다시 보면서 '로또'라는 도메인에 대한 이해없이 ‘어떤 객체가 필요하겠구나’ 라고 생각한 부분은 객체의 책임을 생각하지 않고 무조건 작은 단위로 나누려고 했었던 것이 아쉽게 느껴졌다. 예를 들어, 로또 번호들을 관리해주는 클래스에 일급 컬렉션 개념을 사용하고자 했는데 일급 컬렉션을 사용한 것에 비해 책임이 많이 부여되지 않았던 것 같다. 제출한 코드가 가독성이 더 좋아질 수 있는 부분이 보여 조금 아쉽다. 다음엔 이렇게 느낀 부분을 잘 생각하고 설계에 대해 더 많이 고민해봐야겠다.

 

지난 주차 회고때 느꼈던 부분을 자연스럽게 코드에 녹이려고 했고, 프리코스를 진행하면서 점점 성장하고 있음을 느꼈다. 코드가 잘 안돌아갈 때는 "왜" 안되는지 이유를 찾으려고 하고, 코드의 흐름을 파악해서 어떤 방향으로 구현을 해야하는지 생각하는 자세를 갖게 되어 충분히 몰입할 수 있었다. 코드를 제출할 때, 아쉬웠던 점에 대해 스스로 부족한 부분을 찾고 이를 극복해나가려고 노력했다. 코드를 구현하면서 부족한 개념에 대해서 스스로 생각해보고, 끊임없이 찾아보고, 내 것으로 만들고자 채찍질하고 있다.

3주차에도 재밌게 잘 배웠고, 열심히 몰입해서 좋은 결실을 맺을 있도록 하겠다.