이번 3주 차 미션은 로또 게임이 나왔다!
2주차 공통 피드백
- 한 함수가 한 가지 기능만 담당하게 한다.
- 함수가 한 가지 기능을 하는지 확인하는 기준을 세운다.
- 처음부터 큰 단위의 테스트를 만들지 않는다.
- 변수 이름에 자료형은 사용하지 않는다.
- 구현 순서도 코딩 컨벤션이다.
- 값을 하드 코딩하지 않는다.
추가된 요구 사항
- 함수(또는 메서드)의 길이가 15라인을 넘어가지 않도록 구현한다.
- 함수(또는 메서드)가 한 가지 일만 잘하도록 구현한다.
- else 예약어를 쓰지 않는다.
- 힌트: if 조건절에서 값을 return하는 방식으로 구현하면 else를 사용하지 않아도 된다.
- else를 쓰지 말라고 하니 switch/case로 구현하는 경우가 있는데 switch/case도 허용하지 않는다.
- 도메인 로직에 단위 테스트를 구현해야 한다. 단, UI(System.out, System.in, Scanner) 로직은 제외한다.
목표
- 클래스(객체)를 분리하는 연습
- 도메인 로직에 대한 단위 테스트를 작성하는 연습
도메인 로직이 뭘까?
이전엔 도메인 로직은 기능을 담당하는 핵심 코드 정도로만 알고 있었습니다.
그래서 도메인 로직에 대해 알아보니 “소프트웨어가 풀고자 하는 현실 세상의 문제”를 가리킨다고 나와있습니다.
즉, 이번 3주차 로또 미션에선 입출력을 제외한 로또를 생성하는 기능 같은 로직이 도메인 로직이라고 생각하였습니다.
도메인 로직에 대한 개념을 익히고 추가된 요구 사항을 보니 “ 단, UI(System.out, System.in, Scanner) 로직은 제외한다.”라는 내용이 있었습니다.
여기서 머리에 스쳤던 생각
도메인 로직은 입출력을 제외한 로또 프로그램을 만들기 위해 핵심적인 기능을 담당하는 로직을 뜻한다고 생각을 했습니다.
도메인 로직에 대한 단위테스트가 이번 3주 차의 목표니까 입출력을 제외한 핵심적인 기능을 담당하는 로직을 테스트해야겠구나, 그래서 UI 로직을 제외하라는 추가된 요구사항이 있었고 여기에 큰 뜻이 있었다고 느꼈습니다.
기능 목록 정리
내가 생각한 객체를 선정하는 방법
저는 항상 객체를 생각할때 현실세계 + 판타지로 생각합니다.
이번 로또 프로그램을 만들기 위해 저는 실제 로또를 생각하며 어떤 객체들이 필요할까?라는 고민으로 설계를 시작했습니다. 로또를 사기 위한 돈(Amount), 그 돈으로 산 구매자의 로또들(BuyerLotto), 당첨번호, 보너스 번호(WinnerLotto), 로또를 발행해 주는 로또상점(LottoShop)이 필요할 거라 생각하였습니다.
클래스 분리를 해서 느낀 장점
- 분리된 클래스들은 회사처럼 각각의 책임이 있습니다. 즉, 책임 분리가 가능하다는 점입니다. 책임이 분리되어 각각의 객체를 관리할 메서드만 작성할 수 있고 가독성이 좋아졌습니다.
- 바뀐 요구사항에 대해 관련된 클래스만 바꾸면 되니 유지 보수성이 좋아질 거라고 생각했습니다. 2주차의 목표인 메서드 분리에서 더 발전하여 3주 차의 목표인 클래스 분리를 연습함으로써 진정한 객체 지향적 설계에 한발 다가가는 느낌이 들어 정말 뿌듯하였습니다.
3주 차를 마치며
우아한 테크코스 프리코스 과정을 통해 단계적으로 성장하는 느낌을 받고 있습니다. 저번 2주 차에도 느꼈지만, 매 주차마다 추가된 요구사항과 목표가 주어지는데 깊이 생각하고 몰입할수록 결국 추가된 요구사항에 닿게 되고, 왜 이런 목표와 요구사항이 주어지는지 알게 되는 신기한 경험을 하였습니다. 단순히 주어진 요구사항을 지키려고 노력하는 동시에 왜 이런 목표와 요구사항이 주어졌는지에 대해 생각해 보는 경험을 통해 생각하는 힘을 몸소 느꼈습니다. 이런 기회를 만들어주셔서 정말 감사합니다. 미션을 구현하며 생각하는 것과 알게 되는 것이 이렇게 즐거운 일이라는 것을 느꼈습니다.
벌써 다음 주면 미션 마지막이라는 게 믿기질 않습니다. 프리코스를 하며 성장하는 재미를 느꼈는데, 다음 주 미션으로 얼마나 성장할지 생각만 해도 기대가 되고 즐거울 거 같습니다. 다음 4주차 미션에서도 최선을 다하겠습니다! 감사합니다.
'대외 활동 > 우아한테크코스 6기 BE' 카테고리의 다른 글
우아한테크코스 6기 4주차 프리코스 회고록 (0) | 2023.11.16 |
---|---|
우아한테크코스 6기 2주차 프리코스 회고록 (0) | 2023.11.02 |
우아한테크코스 6기 1주차 프리코스 회고록 (0) | 2023.10.24 |