본문 바로가기

강의/TDD, Clean Code with Java 12기

(33)
람다 실습 1 - 익명 클래스를 람다로 전환 람다 실습 1 - 익명 클래스를 람다로 전환 Car 클래스는 아래와 같다. package nextstep.fp; import java.util.Objects; public class Car { private final String name; private final int position; public Car(String name, int position) { this.name = name; this.position = position; } public Car move(MoveStrategy moveStrategy) { if (moveStrategy.isMovable()) { return new Car(name, position + 1); } return this; } @Override public bo..
람다 람다(lambda) 람다와 클로저 람다는 익명 함수의 다른 표현이다. 즉, 함수는 함수인데 이름이 없는 경우를 의미한다. Collection의 모든 값을 출력 // nextstep.fp.Lambda의 printAllOld method List numbers = Arrays.asList(1, 2, 3, 4, 5, 6); for (int number : numbers) { System.out.println(number); } 람다가 없던 시절 List numbers = Arrays.asList(1, 2, 3, 4, 5, 6); numbers.forEach(new Consumer() { public void accept(Integer value) { System.out.println(value); } }); ..
[로또] step4 - 로또(수동) - 29일차 기능 요구사항 현재 로또 생성기는 자동 생성 기능만 제공한다. 사용자가 수동으로 추첨 번호를 입력할 수 있도록 해야 한다. 입력한 금액, 자동 생성 숫자, 수동 생성 번호를 입력하도록 해야 한다. 구입금액을 입력해 주세요. 14000 수동으로 구매할 로또 수를 입력해 주세요. 3 수동으로 구매할 번호를 입력해 주세요. 8, 21, 23, 41, 42, 43 3, 5, 11, 16, 32, 38 7, 11, 16, 35, 36, 44 수동으로 3장, 자동으로 11개를 구매했습니다. [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, ..
[로또] step4 - 로또(수동) - 29일차 (step3 피드백 및 피드백 반영) Rank 내부적으로 값이 변경된다면 해당 코드를 수정해야 하는 문제가 남아있네요 🤔 Rank 안에 matchBonus 상태도 가지고 있다면 values()를 활용한 반복문을 이용할 수 있을 것 같아요! if (countOfMatch == Rank.FIRST.getCountOfMatch()) { return FIRST; } if (countOfMatch == Rank.SECOND.getCountOfMatch() && matchBonus) { return SECOND; } if (countOfMatch == Rank.THIRD.getCountOfMatch() && !matchBonus) { return THIRD; } if (countOfMatch == Rank.FOURTH.getCountOfMatch())..
[로또] step3 - 로또(2등) - 27일차 (피드백 및 피드백 반영) private HashMap resultRankMap = new HashMap(); private Map resultRankMap = new HashMap(); 이펙티브 자바 아이템 64. 객체는 인터페이스를 사용해 참조하라를 참고해주세요~ 다른 부분도(ex. ArrayList -> List)도 같이 확인해주세요 :) 수정완료! if (countOfMatch == 6) { return FIRST; } if (countOfMatch == 5 && matchBonus) { return SECOND; } if (countOfMatch == 5 && !matchBonus) { return THIRD; } if (countOfMatch == 4) { return FOURTH; } if (countOfMatch =..
[로또] step3 - 로또(2등) - 26일차 프로젝트를 구현하는데 초점을 맞춰서 빨리빨리 PR을 요청하는 것 보다는 템포를 조절하면서 생각하는 것도 중요하다 판단하였다. 며칠동안은 여유롭게 즐기며 로또(2등) 프로젝트를 어떻게 만들지 생각해 보았다. 로또를 구매하고 결과를 맞춰보는 일련의 과정을 생각하면서 도메인을 좀 더 다양하게 구성해보았다. 일단 로또를 구매하는 고객이 존재한다. 이 고객은 (Customer) 로또 판매점에 있는 로또 기계에서(LottoMachine) 로또를 돈주고 구매할 것이며 로또 기계는 무작위 번호를 추출하여 로또를 발행하여 고객에게 준다. 발행한 로또를 보며 고객은 결과를 비교할 것이다. 위의 과정을 생각하며 코드를 작성해보았다. 코드 구조는 아래와 같다. ' 구조를 다시 살펴보니 당첨 번호, 보너스 볼을 검증하는 부분이..
[로또] step2 - 로또(자동) - 최종 피드백 (22일차) static Lotto lotto = new Lotto(); static ArrayList issuedLottolist = new ArrayList(); 해당 변수들은 생성자를 통해 초기화하고 있는데요 생성자를 통한다는 것은 인스턴스화를 한다는 것인데, 모든 인스턴스가 공유하는 자원을 생성자로 초기화하는 설계에 어떠한 문제가 있을지 고민해보면 좋겠습니다! 추후 해당 서비스를 웹서비스로 공개하여 실제 로또 서비스를 여러 유저들이 사용할 수 있게 구현한다는 생각으로 접근해보면 좋을 것 같아요 :) 생성자에서 초기화를 하는 것에 대한 문제는, 클래스를 사용할 때 무조건 해당 변수를 인자로 넣어야 한다는 부담감이 생기는 것에 대한 문제 일까요?? LottoMachine에 있던 lastWinningLottoNum..
[로또] step2 - 로또(자동) - 피드백 및 피드백 반영(21일차) 해당 변수들은 생성자를 통해 초기화하고 있는데요 생성자를 통한다는 것은 인스턴스화를 한다는 것인데, 모든 인스턴스가 공유하는 자원을 생성자로 초기화하는 설계에 어떠한 문제가 있을지 고민해보면 좋겠습니다! 추후 해당 서비스를 웹서비스로 공개하여 실제 로또 서비스를 여러 유저들이 사용할 수 있게 구현한다는 생각으로 접근해보면 좋을 것 같아요 :) 생성자에서 초기화를 하는 것에 대한 문제는, 클래스를 사용할 때 무조건 해당 변수를 인자로 넣어야 한다는 부담감이 생기는 것에 대한 문제 일까요?? LottoMachine에 있던 lastWinningLottoNumberChecker 클래스를 밖으로 빼고, 생성자에서 초기화 하던 부분을 수정하였습니다. 도메인 내에 View의 로직을 가지고 있다면 어떠한 문제가 있을지..