
우테코 프리코스 Start!!
너무나 기대하고 고대하던 우아한테크코스를 위한 프리코스가 시작이 되었다!
두둔! 역시 소문 그대로 클린 코드를 위한 프로그래밍 요구사항이 있었다. 친절하게 자바 컨벤션 관련 내용 링크도 달려 있었고 깃 커밋 로그에 대한 링크도 달려 있었다. 열심히 정독하고 시작을 한다.
베이스볼 게임
1차 과제 주제는 베이스볼 게임이다. 사실 베이스볼 게임은 3달 전 혼자 만들어 본 경험이 있는 주제였다. 전공생들은 한 번씩 만들어 본다는 주제들을 다 도전 해 보았고 그중 하나가 베이스볼 게임이었다. 그 당시 만든 목적이 잘 만든다는 목적보다는 ‘일단 돌아가면 된다’라는 목적을 갖고 만든 탓에 코드가 참… 심각했다.(3 달 안에 이렇게 성장했구나!! 뿌듯 😊)
이러한 요구사항 속에서 코드를 작성하는 건 처음이었다. 그리고 내 코드가 누군가에게 평가를 받을 거란 생각에 너무 설레고 기대됐다. 먼저, 프로젝트 구조를 파악을 시도했다. 프로젝트에는 미리 만들어 진 RandomUtils라는 클래스가 있었다.
private static final Random RANDOM = new Random();
private RandomUtils() {
}
public static int nextInt(final int startInclusive, final int endInclusive) {
...
나라면 1~9까지만 생성이 되는 숫자를 리턴했을 것이다. 하지만 여기 클래스에는 외부에서 조금 더 유연성있게 가져다 사용 할 수 있게 시작과 끝을 정할 수 있는 파라미터를 받는다. 오… 벌써 무언가 배우기 시작했다… 행복하다…
정말 나의 모든 것을 쏟아 부울 수 있게 배웠던 모든 것을 적용해 나갔다. 먼저, 구현할 기능부터 read-me에 추가해보자!
이제 각 기능을 개발을 시작한다. 개발 방식은 TDD로 진행했다. TDD의 중요성을 이번 프로젝트를 하면서 엄청 깨달았다. 테스트를 하기 위해 기능을 개발하니 기능 자체가 너무 잘 쪼개지는 기분이었고(지극히 주관적..) 어떤 메소드를 public으로 해야할 지 판단이 더 잘 되는 것 같았다. 거기에 프로그래밍 요구사항까지 지키려보니 나름 이전 만들어봤던 Baseball Game에 비해 너무 깔끔했다.
누나가 게임을 하더니 0을 마구 눌러서 0도 유효성 검사에 넣게 되었다…
느낀점
어제는 분명 완벽하다 생각하고 흐뭇한 생각에 잠이 들고 아침에 보면 리팩토링 해야 할 것들이 보인다. 원래 프로젝트는 기능을 추가하고 테스트가 잘 돌아가면 다음 기능으로 넘어가는 방식이었는데 이번에는 리팩토링을 하면 테스트가 잘 돌아가는지 확인을 하며 TDD의 참맛을 깨달았던 프로젝트였다.
최근에 자바라는 기본에 많이 소홀했던 것 같다. 스프링 MVC패턴에 익숙해져 Controller → Service → Repository → DB 이런 흐름으로만 개발하다 콘솔에서 입력 받아 표현하려 하니 처음에는 많이 어색했다. 사실 패턴이 주는 장점을 잘 파악하지 못하고 개발했던 것 같다. 이번 Baseball 관련 도메인을 만들면서 Baseball 객체를 도메인 모델이라고 보기에는 생성의 책임도 주어지고 모델의 책임도 주어져서 무언가 복잡하다라는 생각이 들었는데 Factory에 도메인 제공이라는 책임을 주어지니 코드가 훨씬 간결해보였다. 이래서 Factory를 사용했구나… 참 반성스러웠던 시간이었다.
궁금한 것 :
- 값을 다시 받기 위해 재귀 함수를 사용했는데 재귀 함수가 끝나기 이전까지 stack에 계속 쌓일텐데 괜찮은 걸까?
-
Domain Model 쪽에서 validate를 하는게 나을까 아니면 입력 값을 받을 때 validate하는 것이 맞을까?
→ specification pattern을 사용하는 것도 나쁘지 않다고 한다.