자동차 경주 게임 구현 - 리팩토링 재시도
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..
AssertJ 맛보기(1)
2022. 3. 1. 23:00
개발 교육/플레이그라운드 with TDD, 클린코드
https://edu.nextstep.camp/c/9WPRB0ys NEXTSTEP에서 자바 플레이그라운드 with TDD, 클린코드라는 과제형(?) 강의를 시작했다 단계별로 과제를 풀며 공부하는 방식이라 이론보다는 실제 코드로 습득할 수 있기에 나에게 더 잘 맞을 것 같아서 신청하게 되었다 TDD, BDD는 나름대로 혼자 공부하면서 회사 업무에 적용해보려고 했지만 쉽지않았던 주제였기에 이번 강의가 굉장히 많은 도움이 많이 될 것 같은 느낌이 든다 요구사항 1 "1,2"을 ,로 split 했을 때 1과 2로 잘 분리되는지 확인하는 학습 테스트를 구현한다. "1"을 ,로 split 했을 때 1만을 포함하는 배열이 반환되는지에 대한 학습 테스트를 구현한다. @Test void requirementCase1()..
클린코드 - 3.함수
2022. 2. 27. 15:27
개발 서적/클린코드
1. 작게 만들어라! 함수를 만드는 첫째 규칙은 '작게', 두 번째 규칙은 '더 작게' 최대한 작게 만드는 것이 이 책에서 이야기하는 함수의 포인트이다 특히 if문, while 문 등에 들어가는 블록은 한 줄로 작성하는 것을 권장할 정도로 작게 만드는 것에 집착한다 즉, 중첩 구조가 생길 만큼 함수가 커져서는 안 된다는 뜻 함수에서 들여 쓰기 수준은 1단이나 2단을 넘어서면 안 된다 이렇게 작성하기를 권장하는 이유는 당연히 읽고 이해하기 쉽게 하기 위해서 이다! 2. 한 가지 해라! 하나의 함수는 한 가지만 처리해야 한다 그렇다면 '한 가지'의 범위는 무엇을 의미할까? 지정된 함수 이름 아래에서 추상화 수준이 하나인 단계만 수행한다면 그 함수는 한 가지 작업만 한다고 말할 수 있다 단순히 다른 표현이 아..
입고 알림봇 (Python + 카카오톡)
2022. 2. 26. 01:14
개발 지식/Etc.
아내가 sony 카메라를 엄청 갖고 싶어 하는데 최근 반도체 이슈 때문에 물량이 없어서 구할 수가 없었다.. 물론 플미가에 사면 가능하지만 그 정도로 급한 건 아니기에 포기 상태였다 고민하다가 크롤링을 공부도 할겸 입고 알림봇을 만들어보게 되었다 파이썬이 아무래도 요즘 잘나간다고하니 Java는 잠시 내려놓고 파이썬으로 개발해보았다 처음 써보는 언어라 구조나 문법도 잘 몰라서 굉장히 허접하게 완성되었... 그래도 뭐 언어가 다 비슷비슷해서 실행만 되는 수준으로 만들기에는 어려운 점은 딱히 없었다 찾아보니 알림봇은 텔레그램으로 많이 해서 고민하다가 난 잘 쓰지도 않는 앱이고 카톡으로 알림 받는 게 더 편할 것 같아서 카톡으로 결정했다 카카오톡 개발자 설정은 다 패스하고 본 코드만 업로드 정리하려고 한다 1...