Java8 실습 - Lamda, Stream, Optional
2022. 4. 7. 22:18
개발 교육/플레이그라운드 with TDD, 클린코드
람다 람다(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); } }..
좌표계산기 구현 - 리팩토링 포함
2022. 3. 26. 18:19
개발 교육/플레이그라운드 with TDD, 클린코드
좌표계산기 구현 좌표계산기(선 길이) 기능 요구사항 사용자가 점에 대한 좌표 정보를 입력하는 메뉴를 구성한다. 좌표 정보는 괄호"(", ")"로 둘러쌓여 있으며 쉼표(,)로 x값과 y값을 구분한다. X, Y좌표 모두 최대 24까지만 입력할 수 있다. 입력 범위를 초과할 경우 에러 문구를 출력하고 다시 입력을 받는다. 정상적인 좌표값을 입력한 경우, 해당 좌표에 특수문자를 표시한다. 좌표값을 두 개 입력한 경우, 두 점을 있는 직선으로 가정한다. 좌표값과 좌표값 사이는 '-' 문자로 구분한다. 직선인 경우는 두 점 사이 거리를 계산해서 출력한다. 실행 결과 좌표를 입력하세요. (10,10)-(14,15) 두 점 사이 거리는 6.403124 좌표계산기(사각형 면적) 요구사항 좌표값을 두 개 입력한 경우, 두..
Factory Method 실습 - 연료 주입
2022. 3. 16. 22:30
개발 교육/플레이그라운드 with TDD, 클린코드
차량에 따른 연료 주입 실습 기능 요구사항 우리 회사는 렌터카를 운영하고 있다. 현재 보유하고 있는 차량은 Sonata 2대, Avante 1대, K5 2대로 총 5대의 차량을 보유하고 있다. 우리 회사는 고객이 인터넷으로부터 예약할 때 여행할 목적지의 대략적인 이동거리를 입력 받는다. 이 이동거리를 활용해 차량 별로 필요한 연료를 주입한다. 차량 별로 주입해야 할 연료량을 확인할 수 있는 보고서를 생성해야 한다. 각 차량별 연비는 다음과 같다. * Sonata : 10km/리터 * Avante : 15km/리터 * K5 : 13km/리터 프로그래밍 요구사항 - 1단계 상속과 추상 메소드를 활용한다. 위 요구사항을 if/else 절을 쓰지 않고 구현해야 한다. 이 요구사항을 만족하는 테스트 코드는 다음과..
자동차 경주 게임 구현 - 리팩토링 재시도
2022. 3. 14. 23:47
개발 교육/플레이그라운드 with TDD, 클린코드
자동차 경주 게임 다시 구현2 기능 요구사항 각 자동차에 이름을 부여할 수 있다. 자동차 이름은 5자를 초과할 수 없다. 전진하는 자동차를 출력할 때 자동차 이름을 같이 출력한다. 자동차 이름은 쉼표(,)를 기준으로 구분한다. 전진하는 조건은 0에서 9 사이에서 random 값을 구한 후 random 값이 4이상일 경우이다. 자동차 경주 게임을 완료한 후 누가 우승했는지를 알려준다. 우승자는 한명 이상일 수 있다. 실행 결과 위 요구사항에 따라 3대의 자동차가 5번 움직였을 경우 프로그램을 실행한 결과는 다음과 같다. 경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분). pobi,crong,honux 시도할 회수는 몇회인가요? 5 실행 결과 pobi : - crong : - honux :..
자동차 경주 게임 구현
2022. 3. 12. 21:24
개발 교육/플레이그라운드 with TDD, 클린코드
자동차 경주 게임 기능 요구사항 각 자동차에 이름을 부여할 수 있다. 자동차 이름은 5자를 초과할 수 없다. 전진하는 자동차를 출력할 때 자동차 이름을 같이 출력한다. 자동차 이름은 쉼표(,)를 기준으로 구분한다. 전진하는 조건은 0에서 9 사이에서 random 값을 구한 후 random 값이 4이상일 경우이다. 자동차 경주 게임을 완료한 후 누가 우승했는지를 알려준다. 우승자는 한명 이상일 수 있다. 실행 결과 위 요구사항에 따라 3대의 자동차가 5번 움직였을 경우 프로그램을 실행한 결과는 다음과 같다. 경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분). pobi,crong,honux 시도할 회수는 몇회인가요? 5 실행 결과 pobi : - crong : - honux : - pobi..
TDD/리팩토링 실습 - 문자열 덧셈 계산기
2022. 3. 9. 16:04
개발 교육/플레이그라운드 with TDD, 클린코드
문자열 덧셈 계산기 기능 요구사항 쉼표(,) 또는 콜론(:)을 구분자로 가지는 문자열을 전달하는 경우 구분자를 기준으로 분리한 각 숫자의 합을 반환 (예: “” => 0, "1,2" => 3, "1,2,3" => 6, “1,2:3” => 6) 앞의 기본 구분자(쉼표, 콜론)외에 커스텀 구분자를 지정할 수 있다. 커스텀 구분자는 문자열 앞부분의 “//”와 “\n” 사이에 위치하는 문자를 커스텀 구분자로 사용한다. 예를 들어 “//;\n1;2;3”과 같이 값을 입력할 경우 커스텀 구분자는 세미콜론(;)이며, 결과 값은 6이 반환되어야 한다. 문자열 계산기에 숫자 이외의 값 또는 음수를 전달하는 경우 RuntimeException 예외를 throw한다. 프로그래밍 요구사항 indent(들여쓰기) depth를 ..
숫자야구게임 다시 구현 - 피드백 적용 후
2022. 3. 6. 18:18
개발 교육/플레이그라운드 with TDD, 클린코드
숫자야구게임 다시 구현 다시 재정비하는 마음으로 TDD에 대해서 정리부터 시작 1. TDD를 하는 이유 1. 디버깅 시간을 줄여준다 2. 동작하는 문서 역할을 한다 3. 변화에 대한 두려움을 줄여준다 2. TDD 사이클 1. 실패하는 테스트를 구현한다 2. 테스트가 성공하도록 프로덕션 코드를 구현한다 3. 프로덕션 코드와 테스트 코드를 리팩토링 한다 3. TDD 원칙 1. 실패하는 단위 테스트를 작성할 때 까지 프로덕션 코드를 작성하지 않는다 2. 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다 3. 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다 다시 초기화하고 새로 코드를 짰음 1. Ball 객체 - Ball.java import java.util.ArrayLi..
숫자야구게임 구현 - 피드백 적용 전
2022. 3. 6. 17:50
개발 교육/플레이그라운드 with TDD, 클린코드
숫자야구게임 구현 기능 요구 사항 기본적으로 1부터 9까지 서로 다른 수로 이루어진 3자리의 수를 맞추는 게임이다. 같은 수가 같은 자리에 있으면 스트라이크, 다른 자리에 있으면 볼, 같은 수가 전혀 없으면 포볼 또는 낫싱이란 힌트를 얻고, 그 힌트를 이용해서 먼저 상대방(컴퓨터)의 수를 맞추면 승리한다. e.g. 상대방(컴퓨터)의 수가 425일 때, 123을 제시한 경우 : 1스트라이크, 456을 제시한 경우 : 1볼 1스트라이크, 789를 제시한 경우 : 낫싱 위 숫자 야구 게임에서 상대방의 역할을 컴퓨터가 한다. 컴퓨터는 1에서 9까지 서로 다른 임의의 수 3개를 선택한다. 게 임 플레이어는 컴퓨터가 생각하고 있는 3개의 숫자를 입력하고, 컴퓨터는 입력한 숫자에 대한 결과를 출력한다. 이 같은 과정..
단위 테스트 실습 - 문자열 계산기
2022. 3. 2. 21:46
개발 교육/플레이그라운드 with TDD, 클린코드
단위 테스트 실습 - 문자열 계산기 다음 요구사항을 JUnit을 활용해 단위 테스트 코드를 추가해 구현한다. 요구사항 사용자가 입력한 문자열 값에 따라 사칙연산을 수행할 수 있는 계산기를 구현해야 한다. 문자열 계산기는 사칙연산의 계산 우선순위가 아닌 입력 값에 따라 계산 순서가 결정된다. 즉, 수학에서는 곱셈, 나눗셈이 덧셈, 뺄셈 보다 먼저 계산해야 하지만 이를 무시한다. 예를 들어 "2 + 3 * 4 / 2"와 같은 문자열을 입력할 경우 2 + 3 * 4 / 2 실행 결과인 10을 출력해야 한다. 본격적으로 TDD 연습에 들어가기전에 기존 소스를 단위 테스트로 변경하면서 리팩토링 연습을 해보고 싶어서 막코딩(?)을 먼저 했다 import java.util.ArrayList; import java.u..
AssertJ 맛보기(2)
2022. 3. 1. 23:13
개발 교육/플레이그라운드 with TDD, 클린코드
다음과 같은 Set 데이터가 주어졌을 때 요구사항을 만족해야 한다. public class SetTest { private Set numbers; @BeforeEach void setUp() { numbers = new HashSet(); numbers.add(1); numbers.add(1); numbers.add(2); numbers.add(3); } // Test Case 구현 } 요구사항 1 Set의 size() 메소드를 활용해 Set의 크기를 확인하는 학습테스트를 구현한다. @Test void setSize() { /* Set의 size() 메소드를 활용해 Set의 크기를 확인하는 학습테스트를 구현한다. */ assertThat(numbers.size()).isEqualTo(3); assertT..