2주 차 주제 - 숫자야구
시작하기 앞서

1주 차를 마치며 수요일 3시에 메일로 과제를 받았다. 2주 차는 매년 우테코 프리코스 1주 차에 진행하던 숫자야구였고, 프리코스 시작 전에 열심히 하고 싶은 마음에 미리 준비를 해봤기에 크게 어렵지 않을 거라 생각했다.

 

🔍 진행 방식
미션은 기능 요구 사항, 프로그래밍 요구 사항, 과제 진행 요구 사항 세 가지로 구성되어 있고, 세 개의 요구사항을 만족하기 위해 노력해야 하며, 기능 구현 전에 기능 목록을 만들고, 기능 단위로 커밋해야 한다.

진행 방식은 1주차와 달라지지 않았지만 추가된 요구사항이 있었다.

  • indent(들여 쓰기) depth를 3이 넘지 않도록 구현. 2까지만 허용
    • 예를 들어 while문 안에 if문이 있으면 들여 쓰기는 2이다.
    • 힌트: indent depth를 줄이는 좋은 방법은 함수를 분리하면 된다.
  • 3항 연산자를 사용하지 않는다.
  • 함수가 한 가지 일만 하도록 최대한 작게 만들어라.
  • JUnit5와 AssertJ를 이용하여 본인이 정리한 기능 목록이 정상 동작함을 테스트 코드로 확인한다

추가된 요구사항은 가독성을 높이고,  기능을 작게 분리하라는 의미 같았고, 작게 만든 기능에 대해서 테스트를 직접 만들어 보라는 의미인 것 같았다. 또 우테코에서 지원하는 API를 사용하여 구현해야 한다는 요구 사항도 있었고, 크게 어려운 요구사항은 없었던 것 같다.

📈 진행 과정

요구사항대로 천천히 기능 목록을 작성하고 기능을 하나 하나 만들어 가던 도중 오류가 하나 있었다.

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by camp.nextstep.edu.missionutils.Console (file:/C:/Users/wltkd/.gradle/caches/modules-2/files-2.1/com.github.woowacourse-projects/mission-utils/1.0.0/dad5230ec970560465a42a1cade24166e6a424f4/mission-utils-1.0.0.jar) to field java.util.Scanner.sourceClosed
WARNING: Please consider reporting this to the maintainers of camp.nextstep.edu.missionutils.Console
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release

읽어봤을 때 우테코에서 제공한 API 문제인 것 같았는데 자바 8 버전에서는 이상이 없던 게 갑자기 에러가 떠서 당황했다.. 검색도 해보고 나뿐만 아니라 다른 분들에게도 뜨는 오류인 것 같았고, 자바 8에서 9로 넘어가면서 바뀐 체제에 의해 생긴 에러라고 이해했고 크게 문제는 없다고 생각되어 넘어가기로 했다.

또 구현하면서 의문점이 생겼던 부분! 상수관리 였다. 클래스를 여러 개 나누어 상수 관리를 어떻게 해야 되나 고민하고, 상수를 한 클래스로 모으는 게 정답인지, 아니면 중복되더라도 클래스에서 사용하는 건 클래스 안에 만들어서 사용하면 되는지 의문점이 들었다.내가 생각한 정답은 둘 다였다. 상수 관리 하는 방법 이 링크에 해당하는 블로그를 보며 공부를 했다.

 

Q. 상수 관리 객체를 만드는 것은 좋은 걸까?

상수 관리 객체를 만드는 것은 필요하다. 나중에 서비스의 데이터베이스 접속 정보와 같은 자료는 관리 객체에서 공통으로 접속하여 사용하는 것이 좋다고 한다. 하지만, 관리하는 상수의 범위는 일정해야 하며, 일정하지 않을 경우 유지보수성이 모호해진다.

우테코 프리코스에서 하는 미션이 회사나, 데이터베이스를 만져야하는 큰 프로젝트는 아니지만, 하나의 시스템으로 보았을 때 로직 관련 상수는 최대한 가까이 둘려고 노력했고, 시스템적으로 요구사항에 필요한 상수들은 상수 클래스를 만들어 상수를 제공한 것 같다.

 

우테코 진행 방식에서 적혀있는 기능 요구 사항에 기재되지 않은 내용은 스스로 판단하여 구현한다. 라는 말은 정답은 없으니 우리가 공부하고 스스로 생각해서 성장해라 라는 의미는 아닐까 ㅎㅎ..

 

게임까지 다 구현을 하고 나서 어떤 것을 테스트 해야하는가 에 대해서도 참 고민을 많이 했다. 자신이 만든 기능에 대해 테스트를 직접 만들어 보라는 요구사항이 있었다.  처음엔 '실행이 되고, 예외 사항만 테스트하면 되지 않을까?' 라는 생각을 했고, 예외 사항만 테스트를 만들었다. 다 만들었을 때는 뭔가 놓친 것 같고, 부실해 보였다. CS공부를 하면서 배웠던 결함에 대해서 테스트를 많이 하면 많이 할수록 결함이 줄어든다는 말이 생각났고, 실행했을 때 이번 게임은 출력도 중요하다고 판단하였고, 모든 출력의 경우에 수를 테스트하게 되었다!  출력문에 대해 테스트하는 방법은 링크를 통해 공부를 하였고, 보니까 우테코 4기 선배님의 블로그였다!아직 어디부터 어디까지 테스트를 해야 하는가에 대한 정답을 얻지는 못했지만, 피어 리뷰를 통해 더 많은 것을 배우고 성장해서 3주 차 미션에 더 열심히 임해보자!

 

🌅 2주 차 후기

한 주 한 주가 지나면서 더욱더 재밌고, 성장하는 것 같다. 어렵고 막히는 부분도 있고, 내가 아는 부분을 활용해서 문제를 해결해 나아간다는 게 매 주가 기대가 된다! 이대로 합격까지 갈 수 있으면... 좋겠지만 워낙 다들 실력이 좋아서 많이 노력해야 할 것 같았다. 객체화는 내가 정말 못하던 부분 중 하나였고, 고치지 않던 습관 중 하나였는데, 이번 기회에 고칠 수 있고, 훨씬 가독성이 높아질 수 있어 좋았다. 아직 모르는 부분도 많고, 문제나 생각이 빠졌을 때 그 부분에 대해서 깊이 생각하는 경향이 있는데, 그로 인해 하나 씩 얻어가고 성장하는 것 같아 기분이 좋았다. 3주 차 미션은 2주 차보다 어려울 것 같지만 지금 해왔던 것처럼, 그리고 피드백을 통해 더 나은 코딩을 할 것이다.

 

✏️ 2주 차 피드백

1주차와 마찬가지로 공통 피드백으로 제공받았다.

  • README.md를 상세히 작성한다.
  • 기능 목록을 재검토한다.
  • 기능 목록을 업데이트 한다.(살아있는 문서 만들기)
  • 값을 하드 코딩하지 않는다.
  • 구현 순서도 코딩 컨벤션이다(상수, 멤버 변수, 생성자, 메소드 순)
    • 몰랐던 부분이라 잘 지켜서 구현해야겠다는 생각이 들었다.
  • 변수 이름에 자료형은 사용하지 않는다
  • 한 함수가 한 가지 기능만 담당하게 한다
  • 테스트를 작성하는 이유에 대해 본인의 경험을 토대로 정리해본다
  • 처음부터 큰 단위의 테스트를 만들지 않는다

나한테 중요하다고 느끼는 부분을 강조하였다. 다음 주차도 피드백을 통해 문제점을 고쳐나가 3주차 미션도 최선을 다할 것이다!

+ Recent posts