3주 차 미션은 자동차 경주 미션이었습니다.
이번 미션에서 두 가지 추가 요구 사항이 생겼습니다.
클래스(객체)를 분리하는 연습
도메인 로직에 대한 단위 테스트를 작성하는 연습
3주 차 미션을 진행하기 전,
추가 요구 사항을 확인하고 구현한 자동차 경주 미션을 되돌아보니,
도메인 로직에 대한 단위 테스트가 작성되었는지 파악하기가 어려웠습니다.
그 이유 중 하나는
무엇을 테스트하는지 명확하게 알 수 없는 test 메서드 네이밍의 문제가 가장 컸다고 생각합니다.
그래서 2주 차 피드백과 동기들의 소통을 통해
이번 미션에서 추가로 신경 쓴 부분은
도메인 분리와 메서드를 분리할 때 일관적인 네이밍 규칙을 통해
가독성을 향상해 코드를 이해하는데 들이는 시간을 최소화해 보는 것으로 정했습니다!
적용한 Java 네이밍 규칙에 대해서 궁금하시다면,
제가 정리한 Java 메서드 네이밍 (Clean code)가 도움이 되시길 바랍니다 :)
2주 차 방식과 동일하게 기능 요구 사항을 복사하여 필요해 보이는 기능 목록 단위를 설정하고
순서대로 도메인과 그에 맞는 역할과 책임을 주는 형식으로 TDD 개발을 진행하였습니다.
이번 미션에서 지난주와의 코드 개선 및 진행과정,
가장 많이 고민한 부분을 공유하고
동기들과의 리뷰 활동을 통해 느낀 점을 적어보려고 합니다.
지난주와의 코드 개선 및 진행과정
[ 메서드 명을 동사 형태로 명확하고 의미 있게 작성하자. ]
네이밍 시 동사 형태로 시작하여 가독성을 향상했습니다.
메서드 이름으로 자주 사용되는 동사 정리하고 이를 도입하였습니다.
검증 : validate ~
입력 : input ~
출력 : print ~
변환 : To ~
상태확인 : Is ~
네이밍 시 명확하고 의미 있게 작성할 수 있도록 축약하지 않고 의미를 담을 수 있도록 노력했습니다.
[테스트 명도 명명규칙을 정해보자]
단위 테스트를 진행하면서, 증가하는 테스트로 양으로 가독성을 위해
테스트도 명명 규칙이 필요할 것 같다는 생각을 하였습니다.
그래서 Display로 네임과 테스트 메서드 네이밍의 규칙을 정하여 가독성을 증가시키도록 노력했습니다.
테스트 명명 규칙을 해당 글을 참고하여
MethodName_StateUnderTest_ExpectedBehavior (메서드명_테스트상태_기대행위)를 사용하려고 했지만,,
의미 있는 메서드명으로 상태를 표현할 수 있어
MethodName_ExpectedBehavior(메서드명_기대행위)로 축약하였습니다.
또한 생성자와 같은 테스트는
Variable_Constructor_ExpectedBehavior(변수_생성자_기대행위)를 도입하여 가독성을 향상했습니다.
가장 많이 고민한 부분
[ 주어진 Lotto 클래스는 분리해야 할까?]
로또 볼 6개가 합쳐진 로또 클래스는 두 가지 역할을 표현할 수 있다고 생각했습니다.
- 로또 당첨 번호를 가지고 있는 클래스
- 플레이어가 가지고 있는 무작위 로또 번호를 가지는 클래스
여기서 추가 요구사항으로 수동으로 로또 번호를 입력하여 가지게 된다고 가정할 때,
플레이어의 로또 번호(자동), (수동)와 당첨 로또 번호를 나눠서 역할을 부여하는 것이
오히려 유지보수 측면에서 어려울 것 같다는 생각을 하였습니다.
그래서 저는 Lotto 클래스가 두 가지 역할을 수행할 수 있도록 구현하는 것을 결정했습니다.
Lotto 클래스가 역할을 수행할 수 있도록 무작위 로또 번호의 생성과
로또볼의 검증 이후 당첨 로또 생성, (수동 로또 번호 생성)으로 확장시켰습니다.
해당 코드를 진행하니 로또 클래스의 직관성과 관리하기 쉬운 코드를 작성한 것 같습니다.
정리
이번 주차에서는 시간이 부족하여 Enum 타입을 하드코딩을 하게 되었습니다.
Enum의 장점인 상태와 행위를 한 곳에서 관리하는 방식을 적용시키지 못해 아쉬움이 남습니다.
4주 차 미션은 Java Enum을 사용하기에 많은 장점을 지닐 것 같아
Enum에 대해서 많은 공부를 하고 미션을 진행하는 것이 매우 효과적일 것 같습니다.
그래서 Java Enum과 Domain을 사용하여
상태와 행위를 분리하고 요구사항을 충족시키도록 노력해야 할 것 같습니다.
저의 3주 차 코드는 아래 링크로 확인하실 수 있습니다!
https://github.com/COBI-98/java-lotto-6
'우아한 테크코스' 카테고리의 다른 글
[우테코] 프리코스 4주차 '크리스마스 프로모션' 미션 회고록 (0) | 2023.11.18 |
---|---|
[우테코] 프리코스 2주차 '자동차 경주' 미션 회고록 (0) | 2023.11.06 |
[우테코] 프리코스 1주차 '숫자 야구' 미션 회고록 (2) | 2023.10.30 |
[우테코] 우아한테크코스 지원 [+2024 입학 설명회] (2) | 2023.10.19 |