(회고) 우아한 프리코스 2주차
Woowahan tech course, First step to mobile developer
우아한 프리코스 7기 2주차 미션
2주차 미션 내용을 보고 싶으신 분들은 가볍게 2주차 미션 챕터로 넘어가시면 되겠습니다. ㅎ
학습 목표
- 여러 역할을 수행하는 큰 함수를 단일 역할을 수행하는 작은 함수로 분리함.
- 테스트 도구를 사용하는 방법을 배우고 프로그램이 제대로 작동하는지 테스트함.
- 1주차 공통 피드백을 최대한 반영함.
1 주차 때의 학습 목표가 모바일 개발 시, 사용하는 언어인 Kotlin에 친숙해 지는 것이었다면,
2 주차의 학습 목표는 기능에 맞게 함수를 분리하는 것이었다.
아래에서 1주차 공통 피드백 이어 설명.
1주차 공통 피드백
1주차 공통 피드백 내용은 실제 직무에서 기본적으로 고려해야하는 부분들에 대해 많은 피드백이 있었다고 생각한다.
피드백을 주신 내용 중 몇 가지 필자가 느끼기에 중요하다고 생각되는 부분만 아래 정리했다.
Commit
메시지 의미있게 작성하기.
소통은 어느 직종, 직무를 떠나서 사회에서 가장 중요한 덕목 중 하나라고 생각한다.
그렇다면,Commit
은 무엇일까? 단순히 코드 변경 내용(로그)를 남기는 것이 아닌, 개발자들의 소통 방법이라고 생각한다.
개발자가 되기 위해서는 개발자 처럼 생각하고 말하는 방법을 배워한다고 생각하는데, 좋은Commit
메시지를 남기는 것은은 좋은 말하기 방법을 하나 배우는 것이라고 생각한다.- 우아한 테크트리에서는
Commit
문을 작성하는 규칙이 있는데, 아래 링크 첨부해 두었으니 미래 우아한 테크코스에 참여하고자 하는 독자들은 읽어보면 좋을 것 같다.AngularJS Git Commit Message Conventions
좋은 git 커밋 메시지를 작성하기 위한 7가지 약속
- 우아한 테크트리에서는
- 오류를 찾을 때, 출력 함수 대신 디버거를 사용한다.
필자를 포함한 많은 초보 개발자들은 구현한 코드에 문제가 발생할 경우 대부분 문제 발생 지점을 찾기 위해서 출력 함수를 사용하고 있을 것이다.솔직히, 코드를 동작 시키는데 오랜 시간이 걸리지 않는 프로그램의 경우 출력 함수를 사용하는게 편하다 😅
매번
print()
를 이용하여, 문제가 발생한 지점을 찾는 것에는 치명적인 문제점이 있다.
그것은 시간이다. 우리 사회에는 시간이 여유롭지 못하다.
그렇기 때문에 디버거를 이용하여 코드 내부의 상태 값이 어떻게 변하는지, 어떤 흐름을 가지고 있는지 이해하는 것이 필요하기 때문에 디버거를 사용해야 한다.- 아래는 본 과정에서 참고할 만한 디버깅 관련 내용들을 링크로 첨부해두었다.
아래 내용들을 종합해서 추후 디버깅 관련 게시물을 작성할 예정이다.
[10분 테코톡] 🍟 웨지의 인텔리제이 디버깅
[10분 테코톡] 오리의 Intellij Debugging
[10분 테코톡] 몰리의 디버깅
Debugging in Visual Studio Code
- 아래는 본 과정에서 참고할 만한 디버깅 관련 내용들을 링크로 첨부해두었다.
- 이름을 통해 의도 나타내기.
위 내용도 마찬가지로 소통과 관련된 내용이다.
개발자들 간의 소통을 위해서
Commit
메시지도 잘 작성해야 하지만, 변수 이름, 함수 이름, 클래스 이름을 포함한 모든 이름을 지을 때,
상대방이 간단히 이해할 수 있도록 작성해야한다.
우아한 테크코스에서는 코드가 길어지는 것을 의식하여 이름을 축약하지 않고 의도를 드러낼 수 있다면 그래도 작성하는 것을 권장하고 있다.
2 주차 미션
이번 미션은 초간단 자동차 경주 게임을 구현하는 것이었다.
기능 요구 사항
- 주어진 횟수 동안 n대의 자동차는 전진 또는 멈춤을 수행함.
- 각 자동차에 이름을 부여할 수 있음, 전진하는 자동차를 출력할 때 자동차 이름을 같이 출력함.
- 자동차 이름은 쉼표(,)를 기준으로 구분하며 이름은 5자 이하만 가능함.
- 사용자는 몇 번의 이동을 할 것인지를 입력할 수 있어야 함.
- 전진하는 조건은 0에서 9 사이에서 무작위 값을 구한 후 무작위 값이 4 이상일 경우임.
- 자동차 경주 게임을 완료한 후 누가 우승했는지를 알려주며, 우승자는 한 명 이상일 수 있음.
- 우승자가 여러 명일 경우 쉼표(,)를 이용하여 구분함.
- 사용자가 잘못된 값을 입력할 경우
IllegalArgumentException
을 발생시킨 후 애플리케이션은 종료되어야 함.
프로그래밍 요구 사항
- 들여쓰기 깊이(indent depth)를 3이 넘지 않도록 구현함.
- 함수가 한 가지 일만 하도록 최대한 작게 만듦.
- 정리한 기능 목록이 정상적으로 작동하는지 테스트 코드로 확인함.
입출력 요구 사항
입력
- 경주할 자동차 이름
1
gum,ra,ze
- 시도할 횟수
1
5
출력
- 차수별 실행 결과
1 2 3
gum : -- ra : ---- ze : ---
- 단독 우승자의 경우
1
최종 우승자 : ze
- 공동 우승자의 경우
1
최종 우승자 : ra, ze
미션 수행
- 우선 구현할 기능 목록을 그래프로 표현하여, 기능별로 함수를 쪼개어 프로그램을 구현하였다.
- 추가적으로, 테스트 코드 사용에 대한 요구 사항이 있었기에 간단한 테스트 코드도 추가하여 기능을 테스트하였다.
레이서 이름 입력값 테스트#1
: 레이서 이름 입력값에 한글이 있는 경우.레이서 이름 입력값 테스트#2
: 레이서 이름 입력값에 공백이 있는 경우.- 공백 제거한 후 경주 수행 되도록 코드 수정.
시도 횟수 입력값 테스트#1
: 음수의 레이싱 시도 횟수 입력이 될 경우.- 에러 발생 시키도록 코드 수정.
아쉬웠던 점
- 1주차 미션을 응용하여 기능 발전시키기.
- 레이서 이름을 입력 받을 때
,
를 구분자로 사용하는데, 위 부분을 1주차에 ‘커스텀 구분자를 이용하여 구분자를 등록하고 입력값을 받는 기능을 추가해보면 어떨까?’라고 생각했다. - 그런데, 구분자를 등록하는 것보다
,
를 구분자로 이름을 입력하라는 안내를 해주면 되기에 굳이 필요한 기능은 아니라고 생각하여 제외하였다.
- 레이서 이름을 입력 받을 때
- 다양한 테스트 수행하기.
- 프리코스를 진행하면서, 디스코드를 통해 해당 주차에 대해 본인들이 수행했던 테스트와 어떤 방식으로 프로그램 구현을 하였는지 공유하는 글이 많이 올라온다.
- 1주차에도 다양한 테스트를 수행해보지 못하여 아쉬웠었는데, 이번 주차가 끝나고 함께 프리코스를 수행 중인 분들의 테스트 코드를 보고 조금 더 분발해야겠다고 생각이 들었다.
- 경험 및 공부한 내용 공유하기.
- 프리코스를 진행하면서 본인들이 공부한 내용들을 디스코드를 통해 공유하는데, 필자도 열심히 공부해서 공유해보면 좋을 것 같다고 생각한다.
- 위 아쉬웠던 부분들 다음 주차에서는 조금 더 개선해서 좋은 개발자가 되고 싶다.😀
두서 없이 작성하여 내용이 길었는데, 읽어주셔서 감사합니다.😀