본문 바로가기

강의

(130)
4단계 자동차경주 (우승자) (8일차) 6일차, 7일차에는 3단계 프로젝트를 진행하였다. 그동안 문제를 해결하는데만 급급하였다. 코드를 어떻게 짜야하는지 고민해본 적이 없기 때문에, 3단계를 진행하는데 많은 어려움이 있었다. 좋은 코드를 작성하기 위해서는 어떻게 진행하여야 하는 가? 에 대한 질문에 답을 찾기 위해 노력하였다. 남의 코드를 많이 보면 될 것인가? 아니다. 나는 아직 기초가 없기 때문에 어떤 코드가 좋은 것인지 판별하기가 어려울 것이다. 그러던 와중에 [오브젝트 : 코드로 이해하는 객체지향 설계] 라는 책을 알게 되었다. 책에서 와 닿는 부분이 있어서 적어본다. 모든 소프트웨어 모듈에는 세 가지 목적이 있다고 한다. 첫 번째 목적은 실행 중에 제대로 동작하는 것이다. - 이것은 모든 모듈의 존재 이유라고 할 수 있다. 두 번째 ..
3단계 자동차경주 - 피드백반영 (6일차, 7일차) 피드백 1 IllegalArgumentException은 RuntimeException 이라 굳이 throws 하지 않으셔도 됩니다 이렇게 명시적으로 throws를 하시면 이 method를 호출하는 곳에서는 try ~ catch를 통해 반드시 Exception을 처리해야 합니다 물론 일부러 강제 하는 의미도 있겠지만, 어짜피 입력 값이 잘못 되서 실행을 종료해야 하는 케이스라면 throws 안하셔도 될 것 같습니다 Exception을 반드시 명시하면 method를 호출하는 쪽에서 주의를 할 수는 있지만 대신 항상 try catch를 통해 Exception에 대한 처리를 해야 하기 때문에 불편한 부분도 있고 호출한 쪽으로 예외상황에 대한 처리를 위임하는 모습이라 구현 난이도가 복잡해질 수도 있습니다 이 부..
3단계 자동차 경주 (5일차) 기능 요구사항 초간단 자동차 경주 게임을 구현한다. 주어진 횟수 동안 n대의 자동차는 전진 또는 멈출 수 있다. 사용자는 몇 대의 자동차로 몇 번의 이동을 할 것인지를 입력할 수 있어야 한다. 전진하는 조건은 0에서 9 사이에서 random 값을 구한 후 random 값이 4이상일 경우이다. 자동차의 상태를 화면에 출력한다. 어느 시점에 출력할 것인지에 대한 제약은 없다. 실행 결과 위 요구사항에 따라 3대의 자동차가 5번 움직였을 경우 프로그램을 실행한 결과는 다음과 같다. 자동차 대수는 몇 대 인가요? 3 시도할 회수는 몇 회 인가요? 5 실행 결과 - - - -- - -- --- -- --- ---- --- ---- ---- ---- ----- 힌트 값을 입력 받는 API는 Scanner를 이용한다..
2단계 문자열 계산기 피드백 반영 (4일차) enum에 대해 자세히 알아보자 TDD 강의를 듣기전 enum에 대한 개념을 알아놓으면 좋을 것 같다고 포비님께서 메일을 보내주셔서 enum에 대해 한번 살펴보았다. https://daram.tistory.com/22?category=953984 이때 살펴본 바로는 enum이 그냥 final 상수를 대체할 수 있는 역할이라는 느낌밖에 받지 못하였다. TDD 다음 스텝으로 넘어가기 전 enum에 대해 한번 정리를 하고 가면 좋을 것 같다고 하여 다시 한번 더 살펴볼 예정이다. 멘토님께서 enum을 참고하라고 보내주신 링크다. https://techblog.woowahan.com/2527/ https://github.com/bingbingpa/java-racingcar/tree/step2/src/main/j..
2단계 문자열 계산기 (2,3 일차) 2단계 실습 시작 Slack을 통해 merge가 되는지 확인한 후에 코드 리뷰 3단계 과정으로 다음 단계 미션을 진행한다. 문자열 사칙 연산 계산기 구현 | 이번 미션의 핵심은 내가 구현하는 코드에 단위 테스트를 추가하는 경험을 하는 것이다. | 모든 예외 상황을 처리하기 위해 너무 복잡하게 접근하지 않아도 된다. 기능 요구사항 사용자가 입력한 문자열 값에 따라 사칙연산을 수행할 수 있는 계산기를 구현해야 한다. 입력 문자열의 숫자와 사칙 연산 사이에는 반드시 빈 공백 문자열이 있다고 가정한다. 나눗셈의 경우 결과 값을 정수로 떨어지는 값으로 한정한다. 문자열 계산기는 사칙연산의 계산 우선순위가 아닌 입력 값에 따라 계산 순서가 결정된다. 즉, 수학에서는 곱셈, 나눗셈이 덧셈, 뺄셈 보다 먼저 계산해야 ..
자동차 경주 - 학습 테스트 (1일차) String 클래스에 대한 학습 테스트 요구사항 1 "1,2"을 ,로 split 했을 때 1과 2로 잘 분리되는지 확인하는 학습 테스트를 구현한다. "1"을 ,로 split 했을 때 1만을 포함하는 배열이 반환되는지에 대한 학습 테스트를 구현한다. 힌트 배열로 반환하는 값의 경우 assertj의 contains()를 활용해 반환 값이 맞는지 검증한다. 배열로 반환하는 값의 경우 assertj의 containsExactly()를 활용해 반환 값이 맞는지 검증한다. @DisplayName("String 1과 2를 split으로 나누고 결과 값이 예상한 결과와 일치하는지 확인") @Test void split1() { String[] result = "1,2".split(","); assertThat(resu..
회원 목록 조회 이때까지 사용자가 입력한 회원 정보를 데이터 베이스에 저장해보았다. 이번에는 저장한 정보를 데이터 베이스로 부터 받아서 view에서 표시해보자. 1. 컨트롤러 @Controller @RequiredArgsConstructor public class MemberController { private final MemberService memberService; @GetMapping("members") public String showMemberList(Model model){ // 저장되어 있는 회원들의 정보를 데이터베이스로 부터 가져와야 함 // 모델에 회원 객체를 저장 // 뷰 리턴 return "members/showMemberList"; } } @GetMapping 에서 필요한 로직은 데이터베이스로 ..
회원 등록 1. 컨트롤러 url로 타고 들어오면 view page를 뿌려주기 위한 controller 를 생성한다. (GET) @Controller @RequiredArgsConstructor public class MemberController { private final MemberService memberService; @GetMapping("/members/new") public String createMemberForm(Model model){ MemberForm memberForm = new MemberForm(); model.addAttribute("memberForm", memberForm); return "members/createMemberForm"; } } @Getter @Setter publi..