본문 바로가기

강의

(130)
자동차 게임 프로젝트 - 강의 정리 자동차 게임 프로젝트 구현시 주의할 점 domain은 view에 대한 의존관계를 가지지 않게 코드를 작성하라. 자동차 경주 프로젝트 RacingGame 클래스가 n개의 자동차를 가지고 있는 형태로 구현해보자. Random 값을 생성하는 클래스를 분리하여 테스트가 쉽도록 구현. 요구사항 분석 후, 가장 작은 단위로 기능을 쪼개서 기능 목록을 만드는 것을 추천한다. ToDo list를 기반으로 commit 로그를 작성하자. ToDo list를 기반으로 test case를 만들자. 객체 설계만큼 기능 목록을 만드는 것이 중요하다. 기능 목록 분리가 어렵다면 아래의 순서로 프로젝트를 진행해보자 일단 구현 (프로그램에 대한 전반적인 지식을 쌓기) -> 구현한 모든 코드를 버린다. -> 기능 목록 작성 -> 만만한..
옵셔널 요구사항 1 - Optional을 활용해 조건에 따른 반환 nextstep.optional.User의 ageIsInRange1() 메소드는 30살 이상, 45살 이하에 해당하는 User가 존재하는 경우 true를 반환하는 메소드이다. 같은 기능을 Optional을 활용해 ageIsInRange2() 메소드에 구현한다. 메소드 인자로 받은 User를 Optional로 생성하면 stream의 map, filter와 같은 메소드를 사용하는 것이 가능하다. nextstep.optional.UserTest의 테스트가 모두 pass해야 한다. 힌트 Guide To Java 8 Optional 문서를 참고해 Optional 사용 방법을 익힌다. Optional.ofNullable(user)을 활용해 User을 Opt..
스트림 실습 map, reduce, filter 실습 1 List에 담긴 모든 숫자 중 3보다 큰 숫자를 2배 한 후 모든 값의 합을 구한다. 지금까지 학습한 map, reduce, filter를 활용해 구현해야 한다. nextstep.fp.StreamStudyTest 클래스의 sumOverThreeAndDouble() 테스트를 pass해야 한다. 구현 결과 public static long sumOverThreeAndDouble(List numbers) { return numbers.stream() .filter(integer -> integer > 3) .map(integer -> integer * 2) .reduce(0, (x,y) -> x + y); } map, reduce, filter 실습 2 nextst..
스트림(stream) map, filter, reduce Collection에 담긴 데이터를 처리하려면 Collection을 순회하면서 각 Element를 처리하는 것이 일반적이다. 앞으로는 순회하는 것을 잊고, Element 처리에만 집중하자. filter 요구사항은 파일 문자 중 길이가 12보다 큰 문자의 수를 구한다. // nextstep.fp.StreamStudy countWords method String contents = new String(Files.readAllBytes( Paths.get("../ war-and-peace.txt")), StandardCharsets.UTF_8); List words = Arrays.asList(contents.split("[\\P{L}]+")); long count = 0;..
람다 실습 2 - 람다를 활용해 중복 제거 람다 실습 2 - 람다를 활용해 중복 제거 3개의 비슷한 기능을 가진 메서드가 존재한다. sumAll, sumAllEven, sumAllOverThree method 소스 코드를 확인하고 중복 제거한다. 람다를 사용하여 중복된 부분을 제거하여 보자. public static int sumAll(List numbers) { int total = 0; for (int number : numbers) { total += number; } return total; } public static int sumAllEven(List numbers) { int total = 0; for (int number : numbers) { if (number % 2 == 0) { total += number; } } retur..
람다 실습 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, ..