Programming

처음으로 코드를 구조적으로 짠 순간

최동훈1 2023. 11. 1. 23:30

"첫 번째 TDD 도전기"

지금까지 나는 단위 테스트를 코드의 정상 작동을 "확인"하는 수단으로만 활용했다.

그러나 이번 우테코미션에서는 TDD 방법론을 이용하여 구현하는 것이 핵심 요구사항이었다.

TDD를 이전에 경험한 적이 없었기에, 관련 자료를 찾아보았다. TDD의 핵심은 세 가지 철칙이었다.

이 세 가지 규칙은 반드시 지켜야 했다.

1. 테스트 코드를 먼저 작성하여 컴파일은 통과하고 실행은 실패하도록 만들기

2. 실패한 테스트 코드가 성공하도록 실제 코드를 작성하기

3. 실패한 테스트 코드가 통과할 수 있을 정도로만 코드를 작성하기 이 세 가지 사이클을 모든 기능 구현에 반복적으로 적용해야 했다. 처음에는 이 과정이 막막했다.

그러나 테스트 코드를 먼저 작성하고, 인텔리제이의 alt+enter 기능을 이용해 프로덕션 코드를 거꾸로 작성하니, 코드가 파편화되는 현상을 경험했다. 이렇게 메서드를 기능별로 개별적으로 구현하니, 문제의 제약사항인 들여쓰기 depth를 2 이하로 유지하는 것이 쉬웠다.

특히, 설계를 잘못했다는 것을 깨닫고 중간에 리팩토링을 해야 했을 때, 이 방법이 매우 효율적이었다.

나는 'Car' 클래스를 객체로 나누지 않고, 랜덤 생성, 전진 및 후진 판단 등이 서비스 계층에 속해야 할 내용을 코드로 작성했다.

[refactor] : Car 도메인 분리 및 CarService 분리 · ulsandonghun/java-racingcar-6@9af6f7a (github.com)

 

[refactor] : Car 도메인 분리 및 CarService 분리 · ulsandonghun/java-racingcar-6@9af6f7a

ulsandonghun committed Nov 1, 2023

github.com

그러다 보니, 'Car'를 객체 배열로 구현해야 한다는 사실을 깨달았고, 코딩 방향을 다시 잡아야 했다.

다행히, TDD를 통해 파편화된 코드를 다시 조립하는 것이 매우 쉬웠기에, 비교적 짧은 시간 안에 리팩토링을 완료했다. 이런 경험을 통해, TDD의 효율성과 강력함을 직접 느낄 수 있었다.

ulsandonghun/java-racingcar-6 at ulsandonghun (github.com)

 

GitHub - ulsandonghun/java-racingcar-6

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

github.com