반응형
코드 경로
https://github.com/next-step/java-lotto/pulls?q=is%3Apr+is%3Aclosed+author%3Ajordy-torvalds
주요 내용
자동/수동 로또 구매 및 당첨 및 당첨금액 확인을 하는 간단한 프로그램을 짜보는 미션이었습니다. 구현 도메인 자체는 쉬웠으나 요구되는 요구사항들을 준수하며 개발하는 것이 어려웠습니다. 요구된 요구사항은 대략 아래와 같습니다.
- TDD로 모든 기능을 구현
- 비즈니스 로직와 UI 로직 분리
- 들여쓰기는 1단계 까지 가능
- 함수 길이는 15라인 이상 금지
- 자바 코드 컨벤션 준수
- else 예약어를 쓰지 않는다.
- 힌트: if 조건절에서 값을 return하는 방식으로 구현하면 else를 사용하지 않아도 된다.
- else를 쓰지 말라고 하니 switch/case로 구현하는 경우가 있는데 switch/case도 허용하지 않는다.
- 기능 단위 커밋
- AngularJS Commit Message Conventions 준수
코드 리뷰 내용
아래와 같은 코드 리뷰를 받았습니다.
- 생성사 내 유효성 검사 로직을 별도 메소드로 분리할 것 & 커스텀 예외를 통해 예외를 좀 더 명확히 표현할 것
- 컬렉션 참조 변수의 변수명을 List 접미사 대신 복수형으로 표현할 것
- validate 메소드에서 boolean 반환 보단 Exception을 throw 할 것
- 팩토리 클래스 별도 선언을 지양하고 해당 클래스에게 위임할 것
- 직접적인 List 대신 1급 컬렉션을 사용할 것
- 1급 컬렉션인 LottoGames에 매번 add해주는게 아닌 한 번에 주입해줄 것
- 도메인 특성상 생성자로 한 번에 주입시 add 메소드를 없애도 됩니다.
- 결론적으로 LottoGames를 불변 객체로 만들 수 있어, 사이드 이펙트를 줄일 수 있습니다.
- 원시값 대신 객체로 주고 받을 것
- View와 Domain의 분리할 것
피드백 내용 외
- 로또 번호는 1에서 45까지 있어 Flyweight 패턴을 사용해서 미리 선언을 해놓은 후에 가져다 쓰는 식으로 비즈니스 로직을 작성함으로써 불필요한 객체 선언을 막을 수 있었다.
느낀점
제가 특정 객체를 생성해주는 팩토리를 별도로 만드는 심각한 팩토리 클래스 충(?)이란 것을 깨달을 수 있었습니다. 또한 좋은 코드는 객체와 객체간의 대화이며, 원시값을 직접 쓰기 보단 객체를 선언해서 명확하게 의도를 표현하는 것이 좋다는 것을 깨달을 수 있는 미션이었습니다.
전체적으로 중점적으로 강조하는 것은 주석이 아닌 코드로 의도를 들어내고, 코드로 미래의 개발자에게 메시지를 전달할 수 있는 코드를 작성하는 것이 중요하다는 것을 깨달았습니다.
이 미션은 처음부터 끝까지 TDD로 진행했는데 백문이불여일타라는말이 있듯 많이 하다보니 TDD가 많이 늘었다는 것을 알 수 있었습니다.
반응형
'Study' 카테고리의 다른 글
[우아한 테크 캠프 Pro 2기] 참여 계기와 과정, 그리고 결과 (0) | 2021.09.30 |
---|