Monthly Piece 코드 개선 여정 그 시작

Monthly Piece 코드 개선 여정 그 시작

코드 개선이라 쓰고 코드 탐정이라 읽다.

·

3 min read


요약하자면 2년 전에 마음만 급급해서 알아보기 힘든 수준의 상태로 코드를 짜놔서 고치고자 결심했다는 것이다.


보이는 걸 구현하는데 급급해서 코드 중복도 많고 데이터 처리 부분에 있어서는 효율성이 떨어진다고 생각하여 코드 개선을 마음 먹었다. 내가 다시봐도 이해하는데 오래 걸리기도 했다. 그리고 역시 오류를 찾는데 한 세월 걸리는 게 가장 큰 문제였다.

일단 프로젝트는 기능별로 폴더링만 해두었다. 그리고 다음 행보로 기존 코드 (MVC라고 하기도 뭐한) MVC 형태에서 MVVM으로 변경하기로 결정했다. 코드 작성 방향을 잡기 위해서다.

원래는 그냥 아는대로 닥치는대로 코드를 ViewController에 집어넣었기 때문에 코드 분리라고 할 것도 없었다. 코드 분리를 너무 하고싶은 나머지 여러가지 아키텍처에 대해 알아보았는데, 현재 앱에 제일 잘 맞는 것은 MVC 아니면 MVVM이었다. 그런데 뷰모델을 따로 둘만한 상황이라 판단하여 MVVM으로 결정했다.

그리고 혼자 만드는 앱이라고는 하나 Issue와 PR 관리를 전혀 안하고 있었기에 나중에 해결방법 등을 잘 모아보기 위해 기능을 적극 활용하기로 결정했다. 어떻게 '잘' 활용할지는 아직 생각 중이다. 마지막으로 내 코드가 어느 수준에서 시작하는지 알아두면 나의 극적인 결심을 이해하기 쉬울 것 같다.

  • navigationController 뷰마다 각각 새로운 네비게이션 컨트롤러, 네비게이션 바 생성. (클래스로 따로 만들지 않음)

  • 뷰 이동을 전부 present와 pop으로 함. (네비게이션 뷰가 있음에도...)

  • 클래스 내 전역 변수 지역 변수 구분 안 함. (프로퍼티에 self 사용 거의 안 함)

  • Global하게 쓰이는 고정값을 각각 클래스에서 변수 만들어서 사용.

  • UI 구성요소 초기화 없이 전부 ViewDidLoad에서 생성 이후 설정함. (tintColor부터 초기값 등 전부)

  • String으로 들어가는 내용들을 enum 등으로 관리하지 않고 각각 필요할 때마다 기입함.

  • 프로토콜을 따로 관리하지 않고 클래스에 필요할 때마다 만들어둠. 근데 프로토콜이라 이름 붙여둔 파일이 있음. (왜지 진짜)

  • 데이터 불러오는 함수를 뷰 컨트롤러 별로 만들어서 사용하고 있음. 따로 파일이나 데이터 관리자 클래스가 있는 것이 아니고 모든 클래스에 그 귀찮은 내용이 다 담겨있음. 이미지도 마찬가지.

  • 파일 데이터 추가 및 제거를 별도의 클래스가 아닌 뷰 컨트롤러에서 실행.

  • 남겨져있는 print문.

  • weak, lazy 등 전혀 사용하지 않음. (메모리 누수 문제 관리 X)

  • 사용하지 않는 ViewController 존재. (이건 이 글 쓰다가 발견함. 왜 만든걸까?)

    class CategoryStatisticViewController: UIViewController {          override func viewDidLoad() {         super.viewDidLoad()     } }

  • 파일 단위 코드 줄 수 (뷰컨트롤러만):

    • 100줄 이하: 4개 (65, 64, 45, 77)

    • 100 ~ 199: 7개 (158, 100, 198, 102, 105, 114, 102)

    • 200 ~ 299: 2개 (285, 204)

    • 300 ~ 399: 2개 (317, 322)

    • 400 ~ : 1개 (551)

      ViewDidLoad에 코드 대부분이 있다는 점에서 굉장히 읽기 난해한 상태.

  • 주석 제거 불충분... (남의 블로그에서 긁어온 거 다시 보면 이해 못할까봐 남겨둔 주석들, 잘 되는지 확인해보겠다고 넣어놨던 print 문 주석으로 둔 것들)

  • 각각의 파일 이름 목적이나 기능에 따라 분리되지 않음

  • 코드 들여쓰기 정도 (7단인가 되는것 같음.)

대충 이런 문제가 있으므로 고쳐 보기로 했다. 일단 화면에 있어야 할 것들이 제대로 있도록 디자인부터 다시 하고 있다. 방학동안 많이 해둘 생각이다.

응원의 여담

일단 이 앱은 출시가 됐다. 코드 못 읽어서 출시 허용 해준걸까? 사실 코드 자체는 안 보는 거로 알고 있다... 코드를 막 짰더라도 겁먹지 말자. 고치면 되니까. 고쳐야겠다는 생각을 한 것도 고칠 수 있는 것도 성장했기에 가능하다고 생각한다.