2주차 미션 내용
자동차들끼리 경주하여 최종 우승자를 출력하는 게임을 구현합니다.
1. 입력
[자동차]
- 자동자이름을 쉼표로 구분하여 입력받습니다.
- 자동차 이름은 5자 이하여야 합니다.
[시도 횟수]
- 양수를 입력받습니다.
2. 실행
[전진 조건]
- 각 자동차는 랜덤으로 0~9사이에 값을 만든 후 값이 4 이상일 경우만 전진합니다
3. 출력
- 자동차들이 라운드를 끝냈을 때마다 실행결과를 출력합니다.
- 시도 횟수만큼의 라운드가 끝난 후에 최종 우승자를 출력합니다. (2명 이상일 경우에는 ,쉼표로 구분하여 출력)
4. 기타 사항
[Exception]
- 사용자의 입력이 잘못되었을 경우에 IllegalException을 발생시키며, 에러메시지를 출력하고 다시 입력받습니다.
[구현]
- 자바 코드 컨벤션을 지킨다.
- indent는 2이하
- else 예약어를 사용하지 않는다.
- 함수는 한가지 기능만 하게 구현
- 프로그래밍 요구사항에서 별도로 변경 불가 안내가 없는 경우, 파일 수정과 패키지 이동을 자유롭게 할 수 있다.
1주차 피드백
1주차 공통 피드백의 내용 중에 제가 고쳐야할/인상깊었던 피드백에 대해 몇가지만 적어보려고 합니다.
1. 이름을 통해 의도를 드러내고, 이름을 축약하지 마라
- 연속된 숫자를 덧붙이거나 불용어(a, an, the, data, info) 사용하지 말 것
- 의도를 드러낼 수 있다면 이름은 길어져도 괜찮다.
- 클래스 이름이 order이고 함수 이름이 ship이라면 order.ship()을 호출하게 되면서, 이름으로 의도를 충분히 드러낼 수 있다.
:항상 느끼지만 이름 작성하는게 참 어렵다고 생각하는데, 피드백을 통해 정확히 어떤 것을 지양해야하는지 듣고나니 앞으로 좀 더 명확하게 이름을 작성할 수 있도록 노력해야겠다는 생각이 들었습니다.
2. 반복하지 마라
3. 의미없는 주석은 달지 않는다.
- 가능하면 이름을 통해 기능의 의도가 드러난다면 주석을 달지 않는다.
** 제가.. 주석 괴물이었다는 것을 깨닫게 된 피드백...ㅋㅋㅋㅋ
예전 학부 시절.. 주석 안달았다가 감점 당한 적이 있었는데..하하 그 이후로 주석을 달기 시작해서 최근에는 너무 꼼꼼히, 길게 달게 된 것 같아요. 너무 많은 주석을 다는 것도 코드를 볼 때 가독성을 떨어뜨리는 것을 깨달을 수 있었습니다. ( 그래서 "이름을 통해 의도를 드러낸다"는 말이 저에겐 정말 의미있는 피드백 이었던 것 같습니다. )
4. IDE의 코드 자동 정렬 기능을 활용해라
Eclipse: ctrl + shift + F
IntelliJ: ctrl + alt + L
** 이것은 몰랐던 꿀팁..!
앞으로 자주 사용하게 될 것 같습니다~
근데 stream을 사용하게 되면 '.' (마침표) 에 따라 \n했던게 다 한 줄 처리가 되는데 이건 어떻게 안되는지..? 확인해봐야할 것 같아요.
어려웠던 점 & 배운 점
0. 커밋 메시지 템플릿 써서 작성하기 성공!!
지난주에 말했던 해결과제 커밋 메시지 template..
이번주는 템플릿을 이용하여 커밋 메시지를 잘 작성할 수 있도록 노력했습니다.
관련 포스팅: https://blog.naver.com/gkfla1017/222588299960
[[git ]commit 템플릿 설정하는 방법(윈도우 기준: cmd, notepad)
커밋 메시지 작성 이유 & 컨벤션 git을 효과적인 협업 도구로 사용하기 위해서는 커밋 메시지를 잘 쓰...
blog.naver.com](https://blog.naver.com/gkfla1017/222588299960)
1. 클래스와 패키지 분리
"별도의 안내가 없다면, 파일 수정과 패키지 이동을 자유롭게 할 수 있다."
이번주 미션에는 위와 같은 안내 사항이 있었기 때문에, 클래스와 패키지 분리에 신경써보려고 했습니다.
이전에는 이클립스로 거의 알고리즘을 풀기만 했었기 때문에, 클래스나 패키지를 여러개 둘 일이 없었습니다. 그래서 다른 분들의 코드도 참고해보고 MVC패턴도 한번 공부해보면서 적용하려고 노력했습니다.
- MVC패턴 적용 -
기능에 따라 클래스를 나누고 용도에 따라 패키지를 나눠서 사용하려고 했습니다. Model과 View를 완전히 분리하고 controller로 domain과 view를 이용하여 프로그램을 구현하는 것에 목표를 두고 구현했는데...
domain과 view의 분리를 완벽히 시키지 못해서 아쉬웠던 것 같습니다.
domain에서 print안하고 view에 객체/인자 전달해서 출력하도록 해야했는데, 함수 하나를 그렇게 하지 못했습니다. 미션 중에는 차라리 자동차의 현재 진행상태를 문자열로 반환하여 OutputView에서 출력시킬까 했는데, 적용해 볼 걸 그랬나봐요. 2주차 공통 피드백에 이 방법이 쓰여져 있더라고요..!
패턴을 적용하여 프로그램을 구현해본 적이 없기 때문에, 익숙치 않아서 그런지 구현보다는 설계가 어려웠습니다. ( 아직도 어디까지 domain에 함수로 넣을 수 있고/없는지 헷갈리네요.. )
다음주에는 이부분을 더 신경써서 고민해봐야 할 것 같습니다.
2. else 예약어 사용 안하기
if하면 else..! 이렇게 자주 사용했던 예약어를 혹여나 무심코라도 안쓰기 위해 처음에는 의식을 좀 했던 것 같습니다. else를 많이 사용하긴 했지만 그래도 평소에 if() return의 구조 역시 많이 사용했기 때문에, 구현이 어려웠다거나 별다른 문제점이 있지는 않았습니다.
3. 예외처리
사실 그 동안은 예외처리를 약간 뭉뚱그려서 하는 안좋은 습관을.. 가지고 있었습니다...(반성중..;ㅅ;)
근데 이번 주차 미션을 하면서 에러 발생 상황을 생각해보고 적절한 에러메시지를 띄운 후 입력값을 다시 받도록 구현하는 연습을 할 수 있었습니다.
+) 다른 분들의 코드를 구경하다가(?)/ 참고하다가 stream 이라는 것을 보았는데, 생각보다 기능도 많고 유용해보이더라고요. 그래서 조금씩 사용해보면서 익혀보려고 합니다.
- 관련 포스팅 -
[우테코] 1주차 미션 회고록 : 숫자 야구 게임
* 메인 블로그로 운영중인 네이버 블로그에 올렸던 포스팅을 뒤늦게 가져오게 되었습니다.
'Programming' 카테고리의 다른 글
[우테코] 3주차 미션 회고록: 자판기 (0) | 2022.01.03 |
---|---|
[우테코] 1주차 미션 회고록: 숫자 야구 게 (0) | 2022.01.03 |
[우아한 테크코스] 지원 후기(+1차 결과) (0) | 2021.12.05 |