본문 바로가기

강의/TDD, Clean Code with Java 12기

(33)
Step4 - 자동차 경주(우승자) - 피드백 반영 (11일차) 안녕하세요 멘토님!! 기존에 pull request가 닫히지 않아서 그대로 여기에 작성합니다. 제가 수정한 커밋들이 지금은 보이지 않는데, github설명을 보니 그대로 이어서 pull request를 작성하면 되는 것 같아 그대로 연결하여 진행하도록 하겠습니다. 네 맞습니다 😄 이 후 미션 진행하실 때도 Review Request 되면 같은 PR에 그대로 작업해주시면 됩니다 😄 말씀해주신 피드백 너무 감사합니다. 모든 피드백이 이해가 갔지만 validInputConfirm()을 객체가 생성할 때 검증을 하라는 것이 처음에는 저에게 와 닿지 않았습니다. 그럴거면 차라리 validInputConfirm() 부분을 input 받을 때 바로 검증하는 것이 더 좋지 않을까 라는 생각이 들었기 때문입니다. 조금 ..
Step4 - 자동차 경주(우승자) (9일차, 10일차) 기능 요구사항 각 자동차에 이름을 부여할 수 있다. 자동차 이름은 5자를 초과할 수 없다. 전진하는 자동차를 출력할 때 자동차 이름을 같이 출력한다. 자동차 이름은 쉼표(,)를 기준으로 구분한다. 자동차 경주 게임을 완료한 후 누가 우승했는지를 알려준다. 우승자는 한명 이상일 수 있다. 실행 결과 위 요구사항에 따라 3대의 자동차가 5번 움직였을 경우 프로그램을 실행한 결과는 다음과 같다. 경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분). pobi,crong,honux 시도할 회수는 몇회인가요? 5 실행 결과 pobi : - crong : - honux : - pobi : -- crong : - honux : -- pobi : --- crong : -- honux : --- pobi ..
4단계 자동차경주 (우승자) (8일차) - 피드백 반영 피드백 1 그리고 구조 변경 된 부분에 대한 테스트 코드가 하나도 없는데요 😨 이 부분도 추가 보완 요청 드립니다 🙇 피드백 2 굳이 이렇게 array로 변환하여 반환하신 이유가 있을까요?? 🤔 이렇게 되면 requestInput을 호출하는 RacingCarMain에서도 이와 같이 어렵게(?) 값을 꺼내야 합니다 😄 int numOfCar = raceInfo[0]; int numOfCycle = raceInfo[1]; 저나 재영님 같은경우 코드 전체를 다 봐서 이해를 할 수 있겠지만 😄 이 코드를 개선하기 위한 다른 개발자나 동료들이 이 부분을 본다면 raceInfo에 0번째에는 무슨 값이 들어있는지, 1번에는 무슨 값이 들어있는지 더더욱 알 수 없습니다 😨 차라리 명시적으로 getNumOfCar(), ..
4단계 자동차경주 (우승자) (8일차) 6일차, 7일차에는 3단계 프로젝트를 진행하였다. 그동안 문제를 해결하는데만 급급하였다. 코드를 어떻게 짜야하는지 고민해본 적이 없기 때문에, 3단계를 진행하는데 많은 어려움이 있었다. 좋은 코드를 작성하기 위해서는 어떻게 진행하여야 하는 가? 에 대한 질문에 답을 찾기 위해 노력하였다. 남의 코드를 많이 보면 될 것인가? 아니다. 나는 아직 기초가 없기 때문에 어떤 코드가 좋은 것인지 판별하기가 어려울 것이다. 그러던 와중에 [오브젝트 : 코드로 이해하는 객체지향 설계] 라는 책을 알게 되었다. 책에서 와 닿는 부분이 있어서 적어본다. 모든 소프트웨어 모듈에는 세 가지 목적이 있다고 한다. 첫 번째 목적은 실행 중에 제대로 동작하는 것이다. - 이것은 모든 모듈의 존재 이유라고 할 수 있다. 두 번째 ..
3단계 자동차경주 - 피드백반영 (6일차, 7일차) 피드백 1 IllegalArgumentException은 RuntimeException 이라 굳이 throws 하지 않으셔도 됩니다 이렇게 명시적으로 throws를 하시면 이 method를 호출하는 곳에서는 try ~ catch를 통해 반드시 Exception을 처리해야 합니다 물론 일부러 강제 하는 의미도 있겠지만, 어짜피 입력 값이 잘못 되서 실행을 종료해야 하는 케이스라면 throws 안하셔도 될 것 같습니다 Exception을 반드시 명시하면 method를 호출하는 쪽에서 주의를 할 수는 있지만 대신 항상 try catch를 통해 Exception에 대한 처리를 해야 하기 때문에 불편한 부분도 있고 호출한 쪽으로 예외상황에 대한 처리를 위임하는 모습이라 구현 난이도가 복잡해질 수도 있습니다 이 부..
3단계 자동차 경주 (5일차) 기능 요구사항 초간단 자동차 경주 게임을 구현한다. 주어진 횟수 동안 n대의 자동차는 전진 또는 멈출 수 있다. 사용자는 몇 대의 자동차로 몇 번의 이동을 할 것인지를 입력할 수 있어야 한다. 전진하는 조건은 0에서 9 사이에서 random 값을 구한 후 random 값이 4이상일 경우이다. 자동차의 상태를 화면에 출력한다. 어느 시점에 출력할 것인지에 대한 제약은 없다. 실행 결과 위 요구사항에 따라 3대의 자동차가 5번 움직였을 경우 프로그램을 실행한 결과는 다음과 같다. 자동차 대수는 몇 대 인가요? 3 시도할 회수는 몇 회 인가요? 5 실행 결과 - - - -- - -- --- -- --- ---- --- ---- ---- ---- ----- 힌트 값을 입력 받는 API는 Scanner를 이용한다..
2단계 문자열 계산기 피드백 반영 (4일차) enum에 대해 자세히 알아보자 TDD 강의를 듣기전 enum에 대한 개념을 알아놓으면 좋을 것 같다고 포비님께서 메일을 보내주셔서 enum에 대해 한번 살펴보았다. https://daram.tistory.com/22?category=953984 이때 살펴본 바로는 enum이 그냥 final 상수를 대체할 수 있는 역할이라는 느낌밖에 받지 못하였다. TDD 다음 스텝으로 넘어가기 전 enum에 대해 한번 정리를 하고 가면 좋을 것 같다고 하여 다시 한번 더 살펴볼 예정이다. 멘토님께서 enum을 참고하라고 보내주신 링크다. https://techblog.woowahan.com/2527/ https://github.com/bingbingpa/java-racingcar/tree/step2/src/main/j..
2단계 문자열 계산기 (2,3 일차) 2단계 실습 시작 Slack을 통해 merge가 되는지 확인한 후에 코드 리뷰 3단계 과정으로 다음 단계 미션을 진행한다. 문자열 사칙 연산 계산기 구현 | 이번 미션의 핵심은 내가 구현하는 코드에 단위 테스트를 추가하는 경험을 하는 것이다. | 모든 예외 상황을 처리하기 위해 너무 복잡하게 접근하지 않아도 된다. 기능 요구사항 사용자가 입력한 문자열 값에 따라 사칙연산을 수행할 수 있는 계산기를 구현해야 한다. 입력 문자열의 숫자와 사칙 연산 사이에는 반드시 빈 공백 문자열이 있다고 가정한다. 나눗셈의 경우 결과 값을 정수로 떨어지는 값으로 한정한다. 문자열 계산기는 사칙연산의 계산 우선순위가 아닌 입력 값에 따라 계산 순서가 결정된다. 즉, 수학에서는 곱셈, 나눗셈이 덧셈, 뺄셈 보다 먼저 계산해야 ..