우테코

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

Younghun 2023. 11. 6. 13:03

2주차 과제

자동차 경주 게임을 만드는 과제였다.

단위 테스트를 작성하고, 기능 단위로 커밋하는 훈련을 할 수 있었다.

요구사항을 체크박스로 정리하니 더 체계적으로 작업할 수 있었다.

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

 

GitHub - woowacourse-precourse/java-racingcar-6

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

github.com


회고

요구사항 목록 작성

이전에는 코드를 작성하면서, 요구사항을 확인했었다.

코드를 작성하고 싶은 마음이 앞서 차분히 요구사항을 분석하지 않았었다.

이로 인해 요구사항을 지키지 않고, 코드를 수정할 일이 자주 발생했다.

 

하지만 요구사항을 미리 분석하고 목록으로 정리하니까 구현할 전체 기능이 체계적으로 파악됐다. 정리는 과정에서 요구사항을 명확히 이해할 수 있었고, 체크 박스를 만들어서 놓치는 부분이 없도록 환경을 만들었다. 또한, 요구사항에는 없는 제약조건도 추가로 고민하고 설계할 수 있게 되었다. 요구사항 분석과 코드 작성을 동시에 할 때와 비교하면 실수도 확연히 줄었고 코드의 품질도 높아졌다.

 

테스트 코드 작성

테스트 코드 예제를 보면서 기능 단위의 테스트 작성법을 배울 수 있었다.

테스트 메소드 이름을 한글로 작성하니까 테스트할 기능을 정확히 명시할 수 있었다.

이는 테스트 코드의 가독성을 높이고, 테스트 실패 시 정확히 어떤 기능이 문제인지 바로 알 수 있게 만들어 주었다. 테스트 시나리오는 경계값을 위주로 진행하였다. 최소값보다 작거나 최대값보다 큰 경우 예외가 제대로 발생하는지 테스트했다.

 

이렇게 기능 단위로 테스트 코드를 작성하니 코드에 대한 신뢰도가 높아졌다. 특히, 일부 변경사항이 있을 때, 테스트 코드를 실행하여 예상치 못한 부수효과를 방지할 수 있다는 점이 좋았다.

 

SRP 원칙 준수

이전 과제에서는 Game 클래스가 게임과 관련된 모든 기능을 전부 수행했었다. 다른 클래스로 위임하지 않고 자체 메소드로 모두 해결한 것이다. 이는 한 클래스에게 지나치게 많은 책임을 부여한 안 좋은 코드다.

 

이번 과제에서는 SRP 원칙을 준수하여 하나의 클래스가 하나의 책임만 가지도록 신경썼다. 입출력 담당, 검증 담당, 게임 담당, 차량 정보 담당으로 클래스를 분리하여 코드를 작성했다. 이 덕분에 개발 과정에서 객체지향적으로 사고하며 코드를 작성할 수 있었다. 코드 가독성이 좋아졌고, 변경사항이 발생해도 사이드 이펙트를 최소화할 수 있었다.

 

종합 후기

많이 들었지만 실천하지 않았던 개발의 기본기를 다질 수 있는 과제였다.

요구사항을 머리로만 이해하지 않고 손으로 직접 쓰면서 정리하니 실수를 줄이고 안정적으로 개발할 수 있었다. 기능 단위로 테스트 코드를 작성하며 견고한 코드를 작성할 수 있었다. SRP를 의식적으로 준수하며, 가독성이 좋고 유지보수가 쉬운 코드를 작성할 수 있었다.

 

기본기는 이론으로만 이해하는 것이 아니라, 직접 실천하면서 배워야 한다는 것을 다시 느꼈다. 다음 과제에서도 이번에 익힌 기본기들을 잊지 않고 실천할 것이다.