우아한테크코스 6기[BE] 프리코스 1주차 회고
1주차 주제는 '숫자야구' 였습니다.
주제가 생각보다 간단하다고 생각해 기능 구현에 목표를 두기 보다는 올바른 구현 과정, 클린 코드들을 고려하며 코드를 작성하고자 했습니다. 따라서 구현 과정과 그 안에서의 고민들을 나누고자 합니다.
기능 요구 사항
‘기능 요구 사항’을 먼저 작성하고 구현해 본 적이 없어, 기능들을 어떻게 나눠야 할지 오랜 시간 고민했습니다. 하지만 나눈 기능들에 따라 순서대로 개발하고 리팩토링을 진행하면서 보다 꼼꼼하고 계획적으로 진행할 수 있었습니다. 또한 더 좋은 구조나 방법이 떠올랐을 경우 ‘기능 요구 사항’을 업데이트하여 프로젝트의 방향성을 다시 세울 수 있었습니다.
TDD
또한 TDD 방법론을 처음으로 도입해 보았습니다. 테스트로 제약사항을 설정하고 그것에 맞추어 코드를 작성한 후 리팩토링을 하는 방법으로 개발했습니다. 처음에는 테스트를 작성하는 것이 느리다고 생각했지만, 미션을 마무리 지을 때에는 보다 꼼꼼하게 작성된 테스트들을 확인할 수 있었습니다. 또한 코드 작성 이전에 대략적인 구조를 먼저 설정할 수 있어 클린코드 작성에도 도움이 되었습니다.
클린코드
클린 코드의 중요성을 느꼈습니다. 우아한테크코스 깃허브에서 클린 코드의 규칙을 확인하고, indent를 줄이고 else를 없애는 등의 리팩토링을 진행했습니다. 이전 코드도 충분히 이해하기 좋을 것이라고 생각했지만, 리팩토링을 거친 코드는 익숙하지 않은 사람도 쉽게 이해할 수 있을 만큼 쉬워졌습니다. 클린 코드가 협업과 유지보수에 중요한 이유를 깨달을 수 있었습니다.
네이밍
또한, 코드의 이해를 위해서는 네이밍도 중요하다는 생각이 들었습니다. 사용자의 입력을 받아 검증하고 타입을 변환해주는 클래스를 ‘NumberFromUser’라는 이름으로 작성했지만, 해당 클래스의 기능을 대변하지 않는다고 생각되어 ‘InputConverter’로 변경했습니다.
그 외에도 'NsTest', 'Assertions' API를 읽어 보며 테스트 작성에 많은 공부가 되었으며, 좋은 아키텍처에 대해 고민하며 추상클래스를 만들어보는 등 1주차 미션을 통해 여러 방면에서 많이 배울 수 있었습니다.