기본적으로 1부터 9까지 서로 다른 수로 이루어진 3자리의 수를 맞추는 게임이다.
IllegalArgumentException
을 발생시킨 후 애플리케이션은 종료되어야 한다.1볼 1스트라이크
낫싱
3스트라이크
3개의 숫자를 모두 맞히셨습니다! 게임 종료
숫자 야구 게임을 시작합니다.
숫자 야구 게임을 시작합니다.
숫자를 입력해주세요 : 123
1볼 1스트라이크
숫자를 입력해주세요 : 145
1볼
숫자를 입력해주세요 : 671
2볼
숫자를 입력해주세요 : 216
1스트라이크
숫자를 입력해주세요 : 713
3스트라이크
3개의 숫자를 모두 맞히셨습니다! 게임 종료
게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요.
1
숫자를 입력해주세요 : 123
1볼
...
양방향 의존 관계가 없게, MVC 구조에 엇나가지 않는 의존성을 띄도록 설계했습니다.
IntelliJ IDEA
를 사용, java 버전 11
으로 세팅하여 사용했습니다.자바 코드 컨벤션
을 지키기 위해 노력했습니다.lf
를 사용했습니다.커밋 메세지 컨벤션
을 지키려 노력했습니다.기능 단위로 커밋
하려 노력했습니다.하나의 기능
인지 계속 생각해가며 커밋을 남겼습니다.MVC모델
을 공부하고, 적용시켰습니다controller
: 사용자의 요청을 받고, 프로그램 실행domain
: 기능 구현에 필요한 요소들service
: 비즈니스 로직view
: 인풋, 아웃풋을 통해 UI와 사용자 응답을 받음SRP(단일 책임 원칙)
을 지키려 노력했습니다.객체지향 생활체조 원칙
을 지키고, 클린코드
를 만들기 위해 노력했습니다.indent
가 1을 벗어나지 않도록 노력했습니다.else·switch
를 쓰지 않았습니다.메소드 당 기능 하나
를 지킬 수 있게 메서드 분리를 했습니다.메서드·변수명
을 축약없이, 이름만 보고도 어떤 기능인지 알 수 있게 적었습니다.디미터 법칙
을 적용시켰습니다.하나의 클래스
가 50줄이 넘지 않도록 했습니다.주석
을 쓰지 않았습니다.단위 테스트
를 작성할 수 있게 노력했습니다.3개 이상의 인스턴스 변수
를 사용하지 않도록 노력했습니다.getter/setter
를 쓰지 않도록 노력했습니다.객체의 상태를 가져오기 위해 꼭 필요한 부분
에서만 getter를 사용했습니다.1. MVC패턴
MVC패턴을 처음부터 공부하고, 적용시켰습니다. 첫 설계대로 기능이 모두 수행되도록 구현하고 나서, 더 좋은 설계를 하기 위해, 코드에 아무런 손도 대지 않고 이틀 내리 자료를 찾아보고 고민했습니다.
Model, Controller, View 자체도 쉽지 않았지만, Model의 domain, service, dto, dao 등에 대해 고민하니 머리가 복잡했습니다. 사실 Model 부분에서 써놓은 모든 것들은 DB와 관련 있는 것들입니다. 하지만 과제에선 DB가 존재하지 않았습니다.
그렇다면 그냥 단순 Model로 분리하고 기능을 구현해야 하나? 그러긴 싫었습니다. 나중에 할 고민, 지금하자는 생각이었습니다. Model을 이해하기 위해 domain에 대해 계속 검색했습니다. 공책에 미션의 필요한 기능, 좋은 설계 구조(양방향 금지) 등을 고민해보며 제 머릿속에서 Model을 사용했을 때, 제대로 썼는지에 대한 납득이 될 때까지 고민했습니다.
결론적으로 dto, dao를 제외한 domain, service를 사용해 리팩토링하였고, 만족스러운 리팩토링이었습니다. 물론, 분명 더 좋은 구조가 있겠지만 그건 계속 고민해볼 문제입니다.
구조가 명확해지니, 어떤 기능들이 그 안에 있어야 하고, 그 기능을 위해서라면 메소드를 어떻게 분리해야 할지가 더 확실하게 보였습니다. 덕분에 테스트 코드를 작성할 때도 굳이 겹치는 테스트를 작성하지 않을 수 있었습니다.
2. 테스트 코드
AssertJ, Junit5에 대해 공부하여 테스트를 적용시켰습니다. 아직 제대로 적용시킨 것이 많지 않아 다음 주 과제는 더 적극적으로 써볼 생각입니다.
클린 코드에서는 간단한 테스트가 가장 좋다고 했지만, 간단한 테스트'만' 작성할 수 있는 것과 일부러 간단한 테스트'로'작성하는 것엔 차이가 있다고 생각합니다.
우테코와 관련된 것들을 찾아보던 중, 유튜브에 박재성 캡틴의 TDD강의를 보게 되었습니다. 다시 곱씹어보며, TDD도 적용시킬 수 있게 노력할 계획입니다.
3. 스터디
위와 같은 고민을 이래저래 하며, 분명 다른 분들도 수많은 고민을 했을 것 같고, 직접 대화해보고 싶었습니다. 생각만 해서는 아무것도 변하지 않으니, 바로 스터디를 만들자 다짐하여 지원문서를 작성하고, 공고를 올렸습니다.
생각보다 많은 분이 지원하셔서 10명이나 되는 분들과 스터디하게 되었습니다. 사실 모두가 뭉칠 수 있는 시간도 한정적이고, 어떻게 이끌고 가야 할지 아직도 고민이 많습니다.
모두가 많은걸 얻어가는 시간이 됬으면 좋겠네요. 참가해주신 것에 대한 감사의 말씀을 드리고 싶습니다😊😊
4. 공부할 것
5. 마무리
어쨋든 2주차도 많은 성장을 할 수 있었던 한주였습니다! 솔직히 프리코스 시작 전에는 이 정도의 코드도 작성을 깔끔하게 못 했을 것 같은데, 1주차, 2주차가 흐름에 따라 저도 모르게 발전하고 있는 것 같습니다.
특히나 함수의 분리, 테스트 코드 작성과 같은 좋은 목표를 주시니 보답이라도 하듯 통학하면서, 자기 전에도 계속 좋은 고민을 할 수 있는 것 같습니다.
잘보고갑니다!