기록하는 공간
우아한테크코스 7기 프리코스[BE] 2주차 회고: 부릉 부릉 부르응… 본문
프리코스 2주 차는 어땠나요?
2주 차도 시험과 함께 시작을 했다. 1주 차와 동일하게 시험 전에 2주 차 과제가 등장했다.
하지만 문제를 보고 마음이 살짝 편했다. 우아한테크코스 프리코스 6기 때와 같은 문제였다.
알고 있던 문제기도 했고, 시험이 겹쳐있어서 혹여나 1주 차와 같이 다른 문제가 나오면 쉽지 않았을 것이라 생각했다.
목표 찾기
이미 풀어봤던 문제였기에, 어떤 목표를 가지고 구현을해야 내게 더 도움이 될지, 어떻게 하면 내가 성장할지 고민했다. 했던걸 그대로 따라 하는 것은 무의미하고 성장을 할 수 없다는 것을 너무 잘 알았다.
그래서 이전에 작성했던 코드를 리팩토링하고 더 객체지향적으로 구현하는 목표를 잡았다.
이 목표를 달성하기위해 나는 내 코드의 문제점을 찾았다.
문제점
- View가 Domain을 알고 있다.
- Controller에서 View의 역할을 하고 있다. 즉, 출력을 하고 있다.
- 변수명을 타입에 맞게 변경 한다.
- cars에 할당한 후에 검증하고 있다.
총 4개의 문제점을 찾았다. (더 있을지도 모른다…😂)
해결
1) View가 Model을 알고 있다.
이전의 잘못된 코드에서는 View에서 Model을 알고 있었다.
MVC 패턴에서 Controller는 Model과 View를 연결해 주는 역할이다. 그렇기에 Controller를 통해 Model의 값을 View에 전달하도록 하여 View가 Model의 정보를 모르게 했다.
2) Controller에서 View의 역할을 하고 있다.
이 말은 즉, Controller에서 출력을 하고 있다는 말이다. 자동차의 전진 상태를 출력하는데, 이 출력을 Controller에서 하고 있었다.
이 문제점을 찾고 나는 Controller의 출력하는 부분을 View에게 역할을 위임하고, Controller에서는 단지 값만을 전달하도록 코드를 수정했다.
3) 변수명을 타입에 맞게 변경한다.
이전의 코드를 보니“List<String> name”으로 작성했었다. List이기 때문에, 복수형으로 names로 작성했어야 했다. 사소하면서 큰 부분이 코드를 읽는데 생각보다 불편함을 주기 때문에 찾아서 수정하였다.
4) 일급 컬렉션인 cars에 값을 할당한 후에 검증을 진행하고 있다.
값을 할당하기 전에 데이터의 유효성을 먼저 검증해야 했지만, 이전 코드에서는 값을 할당한 후에 검증을 진행했다. 데이터가 변경되지 않았는지, 이상이 없는지 먼저 확인해야 하므로, 검증 후 값을 할당하는 방식으로 수정했다.
이와 같이 4가지의 문제점을 찾아 해결하여 더 객체지향 적으로 리팩토링 할 수 있었다.
고민하고 공부한 부분
1) Name Class를 왜 Record로 사용했을까?
record는 자바 14버전부터 나왔지만 17버전부터 많이 사용되었다. Name Class를 Record로 구현한 이유는 불변성을 유지하고 간결한 코드로 표현하기 위함이다. Record는 불변 객체를 쉽게 만들 수 있고, 생성자와 필드 정의, equals와 hashcode, toString 메소드를 자동으로 생성해 준다.
그래서 Name처럼 단일 필드를 가지는 객체는 데이터를 보관하는 것 외에 검증과 같은 특별한 로직이 많지 않으므로, 불변성과 필드에 접근을 간단하게 할 수 있는 Record를 사용하였다.
2) PowerGenerator를 인터페이스로 분리하였을 때 이점
자동차의 전진 조건인 랜덤 한 숫자를 반환하는 부분에서 테스트 코드를 생각했다.
테스트 코드를 작성할 때 랜덤 한 숫자를 반환하는 메소드를 사용하게 되면 테스트를 할 때마다 랜덤 한 값이 나오게 되어서, 실행을 해도 성공하는 경우와 실패하는 경우가 랜덤 하게 나올 것이다.
그래서 PowerGenerator 인터페이스를 만들어서 FixPowerGenerator와 RamdomPowerGenerator가 해당 인터페이스를 구현하도록 했다.
이와 같이 나눔으로써 애플리케이션 로직에서는 랜덤 한 숫자를 반환할 수 있고, 테스트 코드에서는 고정된 값을 반환하여 일정하게 테스트를 성공했다.
결과적으로 상황에 맞게 코드를 구현할 수 있었다.
마무리
2주 차를 마치며 Controller에 비즈니스 로직이 포함되어 있다는 점을 인지하게 되었다. 구현 당시에는 놓친 부분이었지만, 코드 리뷰와 피드백을 통해 문제를 발견할 수 있었다. 아쉬움이 남는 2주 차였지만, 문제를 알고 개선한 만큼 보람을 느끼며 회고를 마친다. 남은 3, 4주 차도 해이해지지 않고 잘 마무리할 수 있도록 최선을 다하고자 한다.
링크
> 코드: https://github.com/giwoong01/java-racingcar-7/tree/giwoong01
> PR: https://github.com/woowacourse-precourse/java-racingcar-7/pull/712
'회고' 카테고리의 다른 글
우아한테크코스 7기 프리코스[BE] 4주차 회고: 편의점이 싫어요. (0) | 2024.11.24 |
---|---|
우아한테크코스 7기 프리코스[BE] 3주차 회고: 혹시.. 나도 1등 당첨? (0) | 2024.11.06 |
우아한테크코스 7기 프리코스[BE] 1주차 회고: 오 쉬운데?(며칠 뒤) 아니구나.. (0) | 2024.10.24 |
구름톤 유니브 2기 벚꽃톤: 기억해봄을 개발하며 (0) | 2024.07.18 |
14일간의 첫 풀스택 개발 : 목표 달성, 도전과 성장 (0) | 2024.05.19 |