이번주에 한 것들을 토대로 얼마나 계획한대로 되었는지 보니 꽤 흡족하다.
하지만 SwiftUI 버전과 관련된 부분은 진행하지 못했다.
결론적으로 3+1 을 계획했고 3 을 성공했다. 1 은 옵션이니 뭐 됐다.
고민을 좀 해보니 4+1 으로 계획해도 될 것 같다. 그래도 갑자기 한 개를 늘리면 실패할 수도 있으니 옵션인 1 을 그대로 가져오도록 하자.
요약은 이쯤하고 어떤 일이 있었는지 하나하나 떠올려보자.
이제 데이터를 입력하고 미리 저장한 데이터를 불러오는 로직을 짰다. 뭔가 앱이 일을 하기 시작한다.
앱, 즉 프로그램의 어원은 "미리 알려주다" 이다. 만약 내가 복잡한 기능을 가진 프로그램을 짰다면 내 머리가 아픈게 당연하다. 이상한 짓을 안하게 내가 한 일만 하도록 하면서 기능이 복잡하면 코드가 복잡해지는 것이다.
이제 코드 재사용성이 관건이다. 나는 코드를 나눠야 한다고 생각한다.
우선 입력 폼과 컨펌 로직을 나누는 이유는 입력하는 폼을 프리셋(활동 미리 저장해놓기), 목표 저장하기 두 도메인에서 사용하기 때문이다. 여기서 코드 재사용성을 발휘해서 효율적으로 코드를 짜려면 입력 로직을 나눠야 한다.
활동 데이터를 컨펌하는 로직은 설정과 연계된다. 컨펌 로직은 활용도가 무궁무진하다. 우선 내가 만드는 앱의 컨셉 중 하나는 "말도 안되는 목표를 짜는 걸 방지하기" 이다. 설정 기능에서 목표의 최대 활동 수를 정할 수 있도록 해놓고, 이 활동 수를 초과하면 경고하도록 한다.
또한, 컨펌 로직은 저장 로직을 scope 한다.
저장하고 불러오는 로직은 좀 짧게 가져갈 생각이다. 지금은 파일 시스템을 생각하고 있으며, 이벤트 기반의 기능들을 넣을 것 같다.
TCA 의 리듀서 뿐만 아니라 모든 모델 객체는 API 를 하나만 가져야 한다고 생각한다. 예를 들어 활동 데이터를 저장하는 로직이라면 save() 정도만 있어야 한다는 것이다. save 하고 나서 완료 이벤트를 전달 받을 수 있다면 더 좋겠다.
즉, 전체적인 코드 리팩토링이 필요하다.
CGV 대용량 팝콘도 부족할 주제다.
사실 얘기하자면 이번주는 개발 진척도에 시간을 많이 썼다. 2주 정도 개발을 했는데 CRUD 가 없다는 건 좀 너무하지 않나? 라는 생각이 들었다.
콜라 한잔 마시면서 생각을 좀 해봤다. 핑퐁핑퐁 하듯이 리팩토링, 기능개발, 리팩토링, 기능개발 이게 맞나????
만약 내가 회사에서 개발을 한다면 물론 마케팅, 기획의 판 안에서 가장 효율적인 제스처를 취할 것이다. 우선 나 혼자 만드는 서비스가 아니고 이 사람들도 다 생각이 있으니 그런 결정을 했겠지....... 라고 믿고 하는 거다. 이런 걸 안 믿을 거면 우린 회사에 모여 일을 하는 이유가 없다. 각자 프리랜서의 길로 흩어지는 것이 세상을 더 밝게 만드는 길일 것이다.
우선 다음주에도 기능 개발을 멈추지는 않을 것이다. 지금 활동을 입력하는 로직은 좀 거지같아도 완성은 되었는데 여기서 리팩토링 했다가 삭제 로직에서 리팩토링 한 것을 모두 엎어야 할 수도 있다. 즉, CRUD 와 외부 디펜던시까지 다 진행이 되고 나서 리팩터링을 시작한다.
그래도 저번주랑 똑같이 한다? 이건 성에 차지 않는다.
테스트에 진심... 이다. 마음은 진심이다!
물론 테스트에 대한 부채는 항상 있었다. 그러나 개발 진척도를 끌어올려야 할 때였고, TCA 에 굉장히 서툰 상황이었다.
이제는 TCA 의 기본 사용법을 알았다. 이제는 TCA 의 심화과정이라고 생각하고, 여러 사용법들을 추가로 익히면서 테스트코드 를 작성해봐야겠다.
리팩토링은 다음주에 안한다. 하지만 테스트 코드는 작성 시작한다.
위에서 말했다시피 코딩테스트 책 1챕터 다 읽고 문제도 다 풀었다. 푼 문제는 전부 백준 저지에서 정답 처리를 확인했고, 이 코드를 그대로 옮겨서 커밋한 뒤 PR 을 보냈다.
https://github.com/ydh0213/coding-test-book/pull/1
좀 쎄한건 이 분이 더 이상 레포지토리 관리를 하지 않으시는 것 같다는 생각이 든다. 마지막 커밋이 많이 오래됐다.
어쨋든 2 챕터도 진행한다. 똑같은 방식으로 문제 풀고 PR 보내는거다.