우테코

[우테코 6기] 웹 백엔드 - 프리코스 3주차

Younghun 2023. 11. 11. 12:43

3주차 과제

로또 게임을 만드는 과제였다.

클래스를 분리하고, 단위 테스트를 자세히 작성하는 훈련을 했다.

과제를 통해 OOP를 몸으로 체득할 수 있었다.

https://github.com/woowacourse-precourse/java-lotto-6

 

GitHub - woowacourse-precourse/java-lotto-6

Contribute to woowacourse-precourse/java-lotto-6 development by creating an account on GitHub.

github.com


회고

클래스 분리

이전에는 입출력 담당 클래스를 하나만 만들었었다.

하나의 클래스에서 입출력 메소드와 안내 문구 상수를 모두 관리하다보니 책임이 커지고, 코드가 복잡해졌다. 이를 개선하기 위해 안내 문구 상수는 별도의 Enum 클래스로 분리하고 입출력 메소드만 한 클래스에서 담당했다. SRP 원칙을 준수하도록 클래스를 분리하니 클래스의 역할이 분명해지고 체계적으로 기능 개발을 할 수 있었다. 버그나 변경사항이 생겨도, 해당 클래스만 살펴보면 되니 유지보수도 편리해졌다.

 

검증 담당 클래스를 만들어서 입출력 담당 클래스가 검증 기능을 위임할 수 있도록 설계했다. 입력과 검증은 한 흐름에서 수행되지만, 검증 기능의 구현을 입출력 클래스에서 할 경우 책임이 커지기 때문에 분리했다.

 

로또 클래스와 로또 게임 클래스도 분리해서 로또 생성과 게임 진행의 책임을 구분했다. 로또 정보를 이용하는 기능은 로또 클래스에서 담당하고, 로또 게임 클래스는 게임의 흐름을 제어하도록 설계했다. 적절한 역할 분배와 유기적인 협력으로 객체지향프로그래밍을 할 수 있었다.

 

단위 테스트

도메인 로직 기능을 추가할 때마다 단위 테스트를 작성했다.

예외처리 로직에서는 예외가 발생하는 케이스 별로 테스트를 작성했다. 이를 통해 모든 예외 케이스에 대한 처리를 테스트하여 탄탄한 코드를 짤 수 있었다.

 

작은 기능을 만들 때마다 테스트 코드를 작동하니 기능 단위의 무결성을 보장할 수 있었다. 이는 작은 기능들이 모인 큰 기능의 무결성도 예측할 수 있게 해주었고, 실제 테스트에서도 정상 동작을 확인할 수 있었다.

 

단위 테스트를 작성하니 기능 개발 시간은 증가했다. 하지만 후에 큰 기능으로 통합하거나 변경사항이 발생했을 때 더욱 꼼꼼한 검증이 가능해서 사이트 이펙트를 예방하거나 선제적으로 탐지할 수 있었다.

 

앞으로도 단위 테스트 전략을 애용할 것이다.