11/6 wooteco: 나는 왜 코드를 쓰레기통에 집어던졌을까?

대체 왜 그런 짓을?
- 3주차 미션을 시작하기 전에, 다른사람 코드도 보고, 내 코드 리뷰받고 하면서 여러 개선점들을 생각해보았다.
- 의사 결정에 근거 가지기
- 모듈의 독립성 확보하기 (떼다가 딴 데 끼워도 되도록 만들어보기)
- 유효성 검사는 View에서 값의 근본적 검사, 모델에서 구체적 로직에 관련된 검사
- 출력 형식에 관한 로직을 모아서 관리하기
- 오버엔지니어링하지 않기(?) => 좀 더 단순하고 직관적인 해결책을 고려해보기
- 트레이드오프를 생각하기
- 상수 관리하기
- 한 곳에서만 쓰이는 상수는 별도 파일로 분리하지 말고 쓰이는 class 내에서 static 필드로 관리
- 상수가 여러 곳에서 쓰이거나, 앞으로 그럴 가능성이 있을 경우 별도 파일로 관리
- 상수 정의할 때 부분으로 정의하고 마지막에 합쳐서 내보내기
- 상수 정의 시 Object.freeze 사용
- 이러한 사항들을 염두에 두고 구현하려고 했는데, 문제는 이 개선점들은 아직 내 몸에 익어있지 않은 상태라는 것이다. 개선점을 처음부터 적용하려고 하니 코드가 쓸 데 없이 복잡해졌고, 복잡하게 구성된 코드를 하나하나 연결하는 데에도 시간이 굉장히 오래 걸렸다.
- 결국 처음부터 모든 개선안을 적용해서 모든 기능을 다 만들려고 꾸역꾸역 구현한 결과, 다음과 같은 문제들이 있었다.
- 오류 발생 시 다시 입력으로 돌아가지 않고, 그냥 throw되서 프로세스가 종료됨. 관련 처리 함수를 만들어놨는데 잘 작동하지 않았음
- 결과가 제대로 출력되지 않음. 당첨 기준 별로 n개 일치 (m원) - i개로 표시되는 부분도 작동하지 않았고, 수익률은 NaN%로 출력됨.
- 충분히 해결 가능한 문제라고 생각했지만, 어디서부터 어디까지가 제대로 작동하는지를 모르니 수정사항을 적용하더라도 제대로 수정 된 건지, 잘못된 접근법이 아닌지도 판단하기 어려웠다.
- 결국 싹 다 지우고 새로 시작해버렸다!
이번 사태에서 얻은 교훈
욕심 부리지 마라 : MVP부터! 작은 기능부터 천천히!
- 가장 큰 패인은 처음부터 큰 그림을 그리려고 한 것이라고 생각한다. 머리에 넣어뒀던 지난 주차의 개선안을 처음부터 적용하려고 하니 앱의 전체적인 흐름 대신 디테일에 집착하게 됐고,
- 전체적인 흐름을 모르니 잘못된 부분을 수정하는 것도 몇 배로 어려워졌다.
- 개선안을 적용하려는 마음이 앞섰던 것 이외에도, 처음부터 완벽하게 만들어서 나중에 수정 안해야지라는 생각도 패착인 것 같다.
- 물론 앱이 제대로 작동하려면 입력값 유효성 검사, 구매 금액 설정, 구매 금액 유효성 검사 등이 다 구현되어있어야 한다. 하지만 기능을 작은 부분부터 순서대로 구현하려면 다른 부분과 연결되는 곳은 일시적으로 비워둘 수 밖에 없다.
- 그러니까, 인풋뷰 만들다가 인풋벨리데이터 만들고, 로또서비스 만들어놓고 또 유효성검사 로직 하나하나 추가하고, 생각해보니 상수 객체도 제대로 분리 안돼있는 거 같아서 내용 수정하고, 또 수정된 상수 객체 사용하는 부분 하나하나 고치고... 하다보니까 전체적인 흐름을 잃어버린 것이다.
앞으로는?
- 1차적인 목표를 테스트를 통과하는 MVP를 구현한다로 두고,
- 그러기 위해서 앱을 작은 부분으로 나누어 하나하나 구현하고 테스트하는 식으로 작업할 필요성을 느꼈다.
- 단순하게 만들고, 개선은 나중에!
- 처음부터 완벽하게 만들 순 없다 : 토대를 쌓는 시간은 낭비가 아니다!
안된다고 던지지 마라!
- 지금에서야 생각한 거지만, 사실 이전의 코드에서 싹 다 지워버리기 전에도 문제는 해결할 수 있었을 것 같다.
- 물론 처음부터 다시 하면서 전체적인 흐름을 다시 익힌 것 자체는 좋았고, 결과적으로 생각보다 빨리 구현할 수 있었다.
- 하지만 실무에서도 뭐가 잘 안된다고 싹 다 던져버리고 다시 시작할 수 있을까?
- 오히려 실무에서는 남이 작성해둔 코드를 기반으로 문제를 해결하거나 개선해야 할 상황이 훨씬 더 많을 것이다.
- 그러니까 내가 만들던 거를 다 뒤엎어버린 근본적인 원인은, 이해하기 어려운 코드를 붙잡고 있기 싫었기 때문일 수도 있다고 생각한다. 별로 좋지 않은 자세이다.
- 물론 지금은 미션에 시간 제한이 걸려 있고, 집안 사정 때문에 투자할 수 있는 시간도 많이 줄어서 그다지 여유롭지 않은 상황이라 그럴 수 있는데, 앞으로는 보기 싫은 코드를 붙잡고 늘어질 수 있는 의지 를 좀 더 키워야겠다.
앞으로는?
- 안된다고 때려치지 않기
- 어디서 어떻게 작동하는지 이해 안되는 코드라도 시간을 들여서 이해해보기 (=> 이것도 경험이고 성장이니까!)
추가적인 감상
- 집밖에서 맥화면으로 코딩하는거 답답하다... 하지만 적응해야 해
- 다음 주차 미션은 처음부터 끝까지 맥 화면으로 해봐야지