TDD를 처음으로 제대로 써본 것 같다!!
아니 오늘은 사실 지난 금요일 풀릴듯 말듯 아쉬운 코딩테스트 문제를 복습하다가 순가 큰 깨달음을 얻었다. 주어진 문제는 문제 자체가 어렵다기 보다는 문제를 찬찬히 읽어본다면 이해는 쉬운 문제였는데 그 문제가 어려운 이유는 달아야할 조건이 매우 많았다. 내가 코딩문제를 풀면서 느낀건 우리 뇌는 생각보다 작동을 잘하고 그 과정속에서 많은 것들을 당연하게 처리한다는 것이었고 그것을 코드로 풀어 낼 때 문제가 생겼다. 워낙 당연하다보니 그것을 코드로 구현할 생각조차 못한다고 해야하나..? 그래서 이번 문제도 문제를 보자마자 촉박한 시간에 쫓기며 급하게 여러 코드를 작성했는데 오늘 시간을 가지고 다시보니 헷갈리는 문제들 일수록 첫 조건부터 확실히 테스트를 하고 코드의 문제가 없음을 확인 -> 다시 두번째 조건 코드를 짜고 -> 다시 두번째 테스트 코드실행 -> 반복 을 하는 것 이었다.
즉 첫째 조건이 문제가 없으므로 두번째 세번째를 찬찬히 풀어감으로써 1번조건의 애매한 경우 * 2번 조건의 애매한 경우의 수 * 3번 조건 ... 으로 폭발적으로 밀려드는 변수를 하나 하나씩 점검하고 넘어감으로써 끝에는 보다 나은 코드를 완성하거나 오류가 나더라도 어디서 난지 파악하기 쉽다는게 TDD의 굉장히 큰 장점인 것 같다. 무엇보다! 내 머릿속에서 하나씩 조건검사 후 통합해야할 어마무시한 복잡성을 테스트 코드가 잡아주니 난 한번에 하나씩 개별 요소들에게만 집중하고 테스트할 수 있어서 문제의 모호성을 없애는 게 너무 당연한 말인데 신기한 경험이었다.
아니 제시된 예제를 다 통과하길래 잘 하고 있는 줄 알았지...
하...
근데 이게 웬일....
마지막 조건 테스트에서 무언가 작동이 안되길래 보았더니... 내가 전혀 생각지도 못한 조건이었는데 그것을 고려하지 않고 테스트 코드를 짠 것이었다..... 큰 조건이 4개(그 안의 세부 조건 따로..) 나 되는 문제라 코드를 수정하려고 보니..정말 첫 조건 그것과 연관된 두번째.. 결국 다뜯어고쳐야하는..상황이어서 ... 일단 수정은 포기했다..(그거 수정하면 나 다른 공부 못함) 진짜 ...시간 공들여서 테스트코드 다 잘 짜놓고 문제에 있는 조건 하나를 고려안해서..심지어 예제만 굴뚝같이 믿고 예제에 그 조건들이 다 포함되어있을줄 알았다...
풀 줄 몰라서 시간을 쓴 게 아니라 생각지도 못한 조건을 고려를 하지 않아서 첨부터 다시 짜야한다는게 충격과 동시에 다행이었다.
이게 만약 실제 업무였다면 난 밤새 애쓴 코드를 다 지우고 다시 처음부터 시간을 쓰고 있었어야 했다...소름이 돋는다 진짜.
이렇게 틀려서 정말정말정말 다행이다.
휴 근데 너무 다행이다. 만약 저 조건이 없이 그냥 통과되었다면 나는 분명 이제 테스트코드를 할 줄안다며 거들먹만 늘고 또 다음 코딩테스트 문제를 대충 보았을 것이다. 저 조건이 있었기에 나의 액션플랜에 반드시 문제의 조건들(프로젝트에선 고려해야할 기능, 우선순위가 되겠지)은 빨간펜이든 뭐든으로 위에 크게 적고 시작한다.가 생길 수 있었다.
또 새로운 메소드를 알게 되었다!
그리고 여담이지만 인텔리제이에서는 불필요한 코드는 다른 메소드로 바꾸어 쓰라며 친절히 알려주기도 한다. 덕분에 새로운 메소드들도 알게되고 여러모로 배운게 많았다.
내일의 액션플랜!
1. 다시 처음부터 코딩테스트 1시간동안 풀어본다.
2. 내일 하는 학습에 TDD를 어떻게 적용할지를 노션에 기록하거나 직접 사용하고 왜 사용했는지 기록한다.
'개발공부하며 느낀 인생 공부' 카테고리의 다른 글
내가 보려고 정리하는 자바 용어[계산기 + 마카오뱅크] (0) | 2022.07.04 |
---|---|
내가 보려고 정리하는 자바 개념들[헬로월드] (0) | 2022.07.03 |
꼴찌 드디어 골든벨 명예의 전당에?? 역전야매골든벨[메가테라 골든벨 6주차 후기] (0) | 2022.07.02 |
쉬운건 없다 뭐든. 심지어 취미 조차도[220701 TIL] (0) | 2022.07.01 |
난 후회충이었는데, 잘하지 않았는데 후회는 없어![8주차 메가테라 주간회고] (0) | 2022.07.01 |
댓글