배달의 민족 운영사인 우아한형제들에서 운영하는 개발자 양성 프로젝트, 우아한테크코스에 지원하게 되었다.
22년에 일정이 변경되어 우아한테크코스의 프리코스를 경험하게 된 것은 나에게 정말 뜻 깊은 경험이었다.
우아한테크코스 프리코스과정에 2주차의 내가 시간을 많이 투자한 부분과 느낀점, 부족한점을 작성하는 회고록이다.
🔎 1주차 피드백 정리
이름을 통해 의도를 드러낸다, 축약하지 않는다.
- 변수, 이름, 함수(메서드), 클래스 이름을 짓는데 연속된 숫자나 불용어를 추가하는 방식을 사용했었다. 나와 다른 개발자 클래스의역할에 대한 의도를 드러내기위한 중요한 활동이므로 적절하지 못했다!
공백도 코딩 컨벤션이다, 공백라인을 의미있게 사용한다.
- 공백 라인을 의미 있게 사용하는 것이 좋아 보이며, 문맥을 분리하는 부분에 사용하는 것이 좋다.
- 과도한 공백은 다른 개발자에게 의문을 줄 수 있다.
- if, for, while문 사이의 공백도 코딩 컨벤션!
📌 미션에 들어가기 전 목표
- 기능 목록을 상세히 나누기
- 함수를 더 분리하는 과정
- 함수별로 테스트를 작성하는 것
같은 수가 같은 자리에 있으면 스트라이크,
다른 자리에 있으면 볼, 같은 수가 전혀 없으면 낫싱이란 힌트를 얻고,
그 힌트를 이용해서 먼저 상대방(컴퓨터)의 수를 맞추면 승리한다.
예) 상대방(컴퓨터)의 수가 425일 때
123을 제시한 경우 : 1스트라이크
456을 제시한 경우 : 1볼 1스트라이크
789를 제시한 경우 : 낫싱
위 숫자 야구 게임에서 상대방의 역할을 컴퓨터가 한다.
컴퓨터는 1에서 9까지 서로 다른 임의의 수 3개를 선택한다.
게임 플레이어는 컴퓨터가 생각하고 있는 서로 다른 3개의 숫자를 입력하고,
컴퓨터는 입력한 숫자에 대한 결과를 출력
👀 주어진 요구 사항 정리
- indent(인덴트, 들여쓰기) depth를 3이 넘지 않도록 구현
- 함수(또는 메서드)가 한 가지 일만 하도록 최대한 작게
- 3항 연산자를 쓰지 않는다.
- JUnit 5와 AssertJ를 이용하여 본인이 정리한 기능 목록이 정상 동작함을 테스트 코드로 확인
- IllegalArgumentException
- pickNumberInRange()
- readLine()
✔ 기능 구현 목록 작성
-숫자 랜덤 생성
1부터 9까지의 숫자
3자리 자연수
각 자리 숫자는 중복 x
-사용자 입력
[예외사항] 3자리의 자연수가 아닌경우
[예외사항] 1부터 9까지의 숫자가 아닌경우
[예외사항] 각 자릿수의 숫자중 중복된 값이 있는 경우
[예외사항] 0이하의 음수의 경우
예외사항의 경우 IllegalArgumentException을 발생시키고 종료
-사용자 입력과 랜덤 생성 숫자 비교
같은자릿수에 같은 수 : 스트라이크
다른자릿수에 같은 수 : 볼
다른자릿수에 다른 수 : 낫싱
-비교 결과 출력
볼, 스트라이크 카운트 후 출력
출력순서 : (x)볼 (y)스트라이크
y가 3이 아닌경우 2.사용자입력 으로 전환
(y=3) 3스트라이크 시 게임 종료 문구 출력
-종료 조건 입력
1 입력 재시작 : 1.숫자 랜덤 생성으로 전환
2 입력 종료 : 게임 종료
[예외사항] 1과 2의 숫자가 아닌 잘못된 값을 입력할 경우
💻 기능 구현
MVC 모델 적용기
baseball
controller
BaseballGame (Model과 View를 결정하여 전달)
model
ComputerNumber (게임을 위한 숫자 랜덤 생성)
PlayerNumber (사용자 숫자 생성)
RetryNumber (재시작 생성)
util
NumberComapare (비교 후 볼, 스트라이크 카운트 저장)
Validator (사용자 입력과 랜덤 생성 숫자 비교를 위한 검증자 생성)
view
InputView (사용자 입력 클래스)
OutputView (출력 클래스)
🎯 고민한 과정, 회고
- MVC 모델을 적용하는 부분에서 클래스를 정확히 나누었는가?
Validator, RetryNumber의 이름과 위치에 대해서 고민했던 것 같다.
- 상수로 선언되는 부분을 그대로 하드코딩한 부분 다음과 같이 진행했어야 했을것 같다.
private static final int MIN_RANDOM_NUMBER = 1;
private static final int MAX_RANDOM_NUMBER = 9;
private static final int MAX_NUMBER_LENGTH = 3;
- Java 코드 컨벤션 규칙을 어기면서 하고있진 않나 코드를 작성하면서 계속 고민을 많이했지만 상수로 선언되는 부분, 지역변수 선언, 코드작성 순서 등 요구 사항을 만족하지 못했던 것 같다.
고민한 과정과 코드들을 보고 다시 주어진 세가지 요구사항을 다시 확인하니 주어진 요구사항이 어떠한 이유로 주어진 것인지 의도를 파악하는데 노력을 많이해야할 것 같은 생각이 들었다.
주어진 요구사항들이 결국 미션에 들어가기 전 목표를 달성하기위한 방향을 나타내고있다고 생각한다.
다음 회차때도 주어진 요구사항을 꼼꼼히 읽고 다른 관점에서 본다면 다른 의도가 있는지 시간을 많이 투자해야할 것 같다.
🚩 다음 목표
- 테스트 코드를 사용해 구현 기능마다 확인하고 넘어가기
- MVC 모델 공부
- Java 코드 컨벤션 공부
🐣 [구현 코드 보러가기]
https://github.com/COBI-98/java-baseball/tree/EUNSH1
'회고' 카테고리의 다른 글
[우테코] 프리코스 4주차 - 다리 건너기 회고록 (2) | 2023.01.01 |
---|---|
[우테코] 프리코스 3주차 - 로또 회고록 (0) | 2023.01.01 |