티스토리 뷰
우아한 테크코스가 시작된 지 벌써 2주가 흘렀다. 1주차가 끝나고 벌써 2주차도 끝났다. 오늘은 2주차를 하고 난 후의 경험과 느낀점을 작성해보려고 한다.
1. 우아한 테크코스 프리코스 2주차 과제
우리가 어릴 적 자주 했었던 숫자 야구 게임을 구현하는 것이 2주차 미션이었다. 처음 시작할 때, 내용만 봤을 때는 구현이 쉽다고 생각했으나 프로젝트를 실행하고 나서 파일들을 확인해보니 이해부터 하는 것이 필요했다. 콘솔로 모든 것을 구현해야 한다는 것이 낯설었기 때문이다.
1주차 미션처럼 이번에도 테스트 코드를 활용해 결과를 내야 했다. 1주차와 다른 점은 테스트 코드가 더 복잡해졌다는 것이었다. 그래서 모르는 것들부터 공부하고 시작해야 했다. 그렇게 이틀을 테스트(Jest)에 대해 공부를 하고 난 후 기본적인 이해를 하고 나서 구현을 시작했다.
이번 미션에서 가장 중요한 것은 하나의 함수는 하나의 기능을 구현해야 한다는 것이었다. 그리고 들여쓰기를 최대 두 번까지만 허용하는 것이 조건이었다. 클린 코드를 학습하면서 자주 봐왔던 것이었지만 막상 실제로 구현하려고 하니 생각보다 어려웠고 시간이 많이 소요됐다.
2. 코드로 기능 구현
처음으로 구현할 때는 파일을 분리해서 하기 보다 하나의 파일에 모든 기능을 작성했다. 그리고 각각 기능을 구현한 메소드가 모두 완성이 되고 나서 최대한 파일로 분리해서 모듈화하려고 노력했다.
const MissionUtils = require("@woowacourse/mission-utils");
const { GAME_START, RESTART } = require('./constant/constant');
const { ballCheck, strikeCheck, compareNumber } = require('./game/bowlingResult');
const numberRandom = require('./computer/randomNumber');
const userInputNumber = require('./user/userInputNumber');
const wrongInput = require('./inputError/wrongInput');
class App {
// 게임 재시작
restartGame() {
MissionUtils.Console.print('게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요.');
MissionUtils.Console.readLine('', (input) => {
wrongInput(input);
if (input === '1') {
MissionUtils.Console.print(RESTART);
this.startGame();
}
if (input === '2') MissionUtils.Console.close();
});
}
// 게임 결과
getResult(userNumber, randomNumber) {
const strike = strikeCheck(userNumber, randomNumber);
const ball = ballCheck(userNumber, randomNumber)
const resultMessage = compareNumber(strike, ball);
MissionUtils.Console.print(resultMessage);
if (strike !== 3) {
this.generateNumber(randomNumber);
} else {
MissionUtils.Console.print('3개의 숫자를 모두 맞히셨습니다! 게임 종료');
this.restartGame();
}
}
// 사용자 입력 숫자 생성
generateNumber(randomNumber) {
const userNumber = userInputNumber();
this.getResult(userNumber, randomNumber);
}
// 게임 실행 (랜덤 숫자 생성)
startGame() {
const randomNumber = numberRandom();
this.generateNumber(randomNumber);
}
play() {
MissionUtils.Console.print(GAME_START);
this.startGame();
}
}
module.exports = App;
최종 목표는 play 메소드만 남기고 모두 분리시키고 싶었다. 그러나 모두 분리를 하고 나니 에러가 발생하였다. 에러를 수정하려고 했으나 제출 시간 마감으로 인해 해결하지 못하고 제출하고 말았다. 기능 구현이 완벽하지 않은 점과 각 기능을 파일로 분리하는 것의 실패가 굉장히 아쉬웠다.
그리고 MissionUtils.console.print("...") 코드에서 하드 코딩한 부분이 있었다. 게임 시작 메세지와 게임 재시작 메세지만 상수로 선언하였고 다른 부분은 하드 코딩하였다. 나중에서야 하드 코딩한 부분은 피해야 할 점이라는 것을 배웠다.
3. 2주차 과제를 하고 나서 느낀 것
(1) 기능 분리를 확실하게 할 것
2주차 과제를 하면서 주어진 조건이 하나의 함수(메소드)는 하나의 기능만 하는 것이었다. 기능 구현을 위한 코드를 작성할 때 최대한 하나의 기능만을 하도록 하고자 했지만 생각보다 쉽지 않았다. 한 가지 기능을 하도록 작성한 것 같았지만 다시 보면 두 가지 기능을 하는 등 생각처럼 되지 않았다. 그래서 최대한 분리할 수 있는 것은 분리하였고 하나의 기능을 하도록 작성하였다. 그러나 그래도 아직 부족하다는 것을 느꼈다. 정확하게 하나의 기능을 하도록 할 수 있도록 더욱 노력이 필요하다는 것을 느꼈다.
(2) README 파일에 기능 목록 작성할 것
README 파일에 기본적인 내용이 미리 작성되어 있어서 건드리면 안 되는 줄 알았다. 그러나 해당 파일에 기능 목록을 작성해도 된다는 것을 알았다. 미리 구현할 기능들을 작성해 문서화하는 것을 중요하게 생각하는 것 같다고 느꼈다. 다음 미션부터는 README 파일에 기능 목록을 미리 작성해서 문서화하는 것을 연습해야 겠다고 느꼈다.
(3) 결과에 매달리지 말 것
미션들을 진행하면서 무조건 성공한 상태로 제출해야 한다는 강박증이 있었다. 그래서 배우는 것보다 결과에만 집중했다. 그러나 미션에 대한 이야기를 나누는 라이브 방송에서 결과만 내는 것보다 내가 모르는 부분은 최대한 해결해보려고 하고 다른 사람들의 코드를 보며 배우는 것에 집중하라는 조언을 들었다. 이 조언을 잘 새겨 들어 배움에 집중해야겠다는 것을 느꼈다.
4. 부족한 것
(1) 에러 처리
2주차 과제를 진행할 때 하지 않았던 것 중 하나가 에러 처리였다. 기능 구현에만 신경을 썼기 때문에 에러 처리를 하려는 생각을 하지 못했다. 코드를 실행하면 항상 에러 처리 오류가 발생하여 이를 알아보니 에러 처리를 해야한다는 것을 늦게 알았다. 에러 처리를 하는 것이 굉장히 부족하다는 것을 크게 느꼈다. 다음 과제부터는 에러 처리를 확실하게 구현해야겠다고 느꼈다.
5. 마무리
합격에 대해 생각을 전혀 하지 않고 신청했는데 막상 시작하고 나니 합격에 욕심이 생기고 과제 성공에만 집중했다. 합격보다 과제를 통해 몰랐던 부분을 배우는 것에 집중할 필요가 있다. 합격과 상관없이 현업에서 구현을 어떻게 하는지에 대해 집중하는 것을 다시 한 번 다짐한다. 남은 2주도 결과보다는 배움에 집중하자!
'부트캠프 > 우아한테크코스' 카테고리의 다른 글
6기 우아한테크코스 프리코스 1주차 회고 (0) | 2023.11.02 |
---|---|
우아한테크코스 5기 결과 (0) | 2022.12.27 |
[우아한 테크코스 5기 프리코스] FE 4주차 회고록 (0) | 2022.11.23 |
[우아한 테크코스 5기 프리코스] FE 3주차 회고록 (0) | 2022.11.16 |
[우아한 테크코스 5기 프리코스] FE 1주차 회고록 (0) | 2022.11.04 |
- Total
- Today
- Yesterday
- if(kakao)dev2022
- 최종추가합격
- 그룹인터뷰후기
- 프론트엔드 챌린지
- 개발 이력서 지원 팁
- 싱글톤
- 설명회느낌점
- React
- 코딩테스트 대비
- Singleton
- 깃허브 Merge
- node
- 개발자이력서꿀팁
- LottieFiles
- PostechAppleDeveloperAcademy
- #포스텍애플디벨로퍼아카데미
- javascript
- 고민한 부분
- Default Branch
- 스프링
- DB Error MongooseServerSelectionError
- 조코딩과함께
- Express
- 자바스크립트
- 원티드 프리온보딩
- 포스텍애플아카데미
- 원티드 프리온보딩 챌린지
- 포스텍애플디벨로퍼아카데미
- Frontend
- 신입개발자가 준비해야 할 것들
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |