본문 바로가기

강의/TDD, Clean Code with Java 12기

(33)
[로또] step2 - 로또(자동) - 피드백 반영(20일차) 해당 객체가 가지고 있는 역할이 굉장히 많은 것 같아요 🤔 적절한 책임을 나누어 객체를 분리해보면 좋겠습니다! 로또 번호가 42까지 밖에 안보이네요 @_@ 또한 값의 범위가 커질수록 하드코딩 하는 것이 힘들어질 수 있기 때문에 범위를 통해 번호를 생성해보면 좋을 것 같아요! InputView의 경우 LottoApp에서 사용하고 ResultView의 경우 도메인 내부에 존재하도록 구현해주셨네요! 도메인 내부에 View의 로직이 존재한다면 어떠한 문제가 있을지 고민해보아요 String 타입으로 로또의 번호라는 사실을 검증할 수 있을까요? 규칙 3: 모든 원시값과 문자열을 포장한다.을 통해 값들을 포장하여 해당 문제를 해결해 볼 수 있을 것 같습니다 :) 이전에 멘토님께서 위와 같은 피드백을 주셨다. 피드백을..
[로또] step2 - 로또(자동) - 피드백 (20일차) import java.util.Arrays; import java.util.Collections; public class LottoMachine { 해당 객체가 가지고 있는 역할이 굉장히 많은 것 같아요 🤔 적절한 책임을 나누어 객체를 분리해보면 좋겠습니다! public class LottoMachine { private static String[] lastLottoNumArray; private static ArrayList lottoNumberList = new ArrayList(Arrays.asList("1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24",..
[로또] step1 - 문자열 덧셈 계산기 - 피드백(20일 차) Matcher m = Pattern.compile("//(.)\n(.*)").matcher(o); Pattern 객체를 반복해서 생성하는 것은 굉장히 비용이 큰 작업입니다. 재사용한다면 어떠한 장점이 있을지 고민해보아요. 충분한 고민 후 이펙티브 자바 아이템 6. 불필요한 객체 생성을 피하라를 참고해주세요! Matcher 부분을 static으로 만들어 한번만 생성하도록 구현하는 것이 더욱 좋을 것 같습니다! - private static int sumStringAry(String[] stringAry) { + private static int sumStringArray(String[] stringArray) { 개인적으로 축약하여 적는 것은 가독성이 떨어진다고 생각하는데 재영님의 생각은 어떠신가요! 저도..
[로또] step2 - 로또(자동) (18일차) indent를 지킨다는 규칙이 너무 버거웠습니다. indent를 지키기 위해 마지막에 수정을 하다보니 코드가 더 더러워진 느낌입니다. issueLotto 메서드 에서는 로또 발행만 하고 compareLottoWithLastLottoNumber 에서 발행한 로또 번호와 당첨 번호를 비교하는 작업만 진행려고 하였습니다. 코드를 짜다보니 for, for, if 문으로 indent가 3이 되버렸고, 이를 피하기 위해 코드를 산재하다 보니 issueLotto 부분이 너무 커진 느낌이 있습니다. 어떻게 변경을 할 지 조금 더 생각해 보도록 하겠습니다. import step2.domain.LottoMachine; import step2.view.InputView; public class LottoApp { publi..
[로또] step2 - 로또(자동) (17일차) 🚀 2단계 - 로또(자동) 기능 요구사항 로또 구입 금액을 입력하면 구입 금액에 해당하는 로또를 발급해야 한다. 로또 1장의 가격은 1000원이다. 구입금액을 입력해 주세요. 14000 14개를 구매했습니다. [8, 21, 23, 41, 42, 43] [3, 5, 11, 16, 32, 38] [7, 11, 16, 35, 36, 44] [1, 8, 11, 31, 41, 42] [13, 14, 16, 38, 42, 45] [7, 11, 30, 40, 42, 43] [2, 13, 22, 32, 38, 45] [23, 25, 33, 36, 39, 41] [1, 3, 5, 14, 22, 45] [5, 9, 38, 41, 43, 44] [2, 8, 9, 18, 19, 21] [13, 14, 18, 21, 23, 3..
[로또] step1 - 문자열 덧셈 계산기 (15일 차) 문자열 덧셈 계산기를 통한 TDD/리팩토링 실습 기능 요구사항 쉼표(,) 또는 콜론(:)을 구분자로 가지는 문자열을 전달하는 경우 구분자를 기준으로 분리한 각 숫자의 합을 반환 (예: “” => 0, "1,2" => 3, "1,2,3" => 6, “1,2:3” => 6) 앞의 기본 구분자(쉼표, 콜론)외에 커스텀 구분자를 지정할 수 있다. 커스텀 구분자는 문자열 앞부분의 “//”와 “\n” 사이에 위치하는 문자를 커스텀 구분자로 사용한다. 예를 들어 “//;\n1;2;3”과 같이 값을 입력할 경우 커스텀 구분자는 세미콜론(;)이며, 결과 값은 6이 반환되어야 한다. 문자열 계산기에 숫자 이외의 값 또는 음수를 전달하는 경우 RuntimeException 예외를 throw한다. 프로그래밍 요구사항 inde..
Step5 - 자동차 경주(우승자) - 피드백 (15일차) 마지막 피드백이 도착하였다. from. 멘토 코드 컨벤션 생각하며 작성하기 MVC 에 맞게 코드를 구분하기 private, static, final 을 적절하게 사용하기 테스트 코드 작성하기 매직 넘버 추출하기 객체가 사용되는 시점에 검증하기 어레이 보다는 컬렉션을 사용하기 stream 사용해보기 위 사항을 지키면서 코드를 다시 한번 작성해 보았습니다. 너무 고생 많으셨습니다 👍 이 열정 무엇?? 👍 이번에는 자동차 등록하는 부분은 Race 클래스에서 -> CarRacer 부분으로 이동하였습니다. 그렇게 되면 CarRacer의 객체가 생성될 때마다 input에 대하여 검증을 진행하겠지만, 멘토님께서 말씀하신 객체가 사용되는 시점에 검증하기 위해서는 이렇게 진행하는 것이 더 옳다고 판단하였습니다. 멘토님께..
Step5 - 자동차 경주(우승자) (14일차) 1. 코드 컨벤션 생각하며 작성하기 2. MVC 에 맞게 코드를 구분하기 3. private, static, final 을 적절하게 사용하기 4. 테스트 코드 작성하기 5. 매직 넘버 추출하기 6. 객체가 사용되는 시점에 검증하기 7. 어레이 보다는 컬렉션을 사용하기 8. stream 사용해보기 위 사항을 지키면서 코드를 다시 한번 작성해 보았습니다. 이번에는 자동차 등록하는 부분은 Race 클래스에서 -> CarRacer 부분으로 이동하였습니다. 그렇게 되면 CarRacer의 객체가 생성될 때마다 input에 대하여 검증을 진행하겠지만, 멘토님께서 말씀하신 객체가 사용되는 시점에 검증하기 위해서는 이렇게 진행하는 것이 더 옳다고 판단하였습니다. 멘토님께서는 대부분의 코드를 stream으로 작성하셨는데,..