MVC 패턴을 사용하면서 ViewController의 복잡도가 점점 증가하는 문제가 발생했다.
UI 업데이트, 데이터 로딩, 네비게이션 처리 등의 로직이 하나의 ViewController에 집중되면서,
코드 가독성이 저하되고 유지보수가 어려워지는 상황이 발생했다.
이 문제를 해결하기 위해 MVVM 아키텍처를 도입하고, Input/Output 패턴을 적용하여 데이터 흐름을 개선하였다.
1️⃣ 문제: ViewController가 점점 비대해지는 문제 발생
프로젝트 초반에는 MVC 패턴을 적용하여 UI와 로직을 분리하려 했지만,
기능이 추가될수록 ViewController의 역할이 과도해지는 문제가 발생했다.
특히, 다음과 같은 문제들이 유지보수를 어렵게 만들었다.
- ViewController 내부에서 UI 이벤트 관리, 데이터 핸들링, 네트워크 요청, 화면 전환 로직이 혼재됨
- 새로운 기능을 추가할 때마다 ViewController의 코드가 계속 증가하여 가독성이 저하됨
- ViewController가 특정 데이터 모델과 강하게 결합되어 있어, 로직을 재사용하기 어려움
2️⃣ 문제 분석: MVC의 한계
기능이 복잡해질수록, MVC 패턴의 근본적인 한계가 드러났다.
특히, View와 ViewController의 강한 결합으로 인해 다음과 같은 문제들이 발생했다.
❌ MVC 구조적 한계
- View와 ViewController 간 결합도가 높음
- UI 업데이트, 네트워크 요청, 비즈니스 로직이 모두 ViewController에서 처리됨
- 특정 ViewController에서만 동작하도록 구현되면서 재사용성이 낮아짐
- 확장성 부족
- 새로운 기능을 추가할 때 ViewController 내부 코드가 점점 증가하여 유지보수가 어려워짐
- 기능이 많아질수록 ViewController가 비대해지고, 코드 변경 시 사이드 이펙트 발생 가능성이 높아짐
3️⃣ 해결 방법: MVVM 도입 및 Input/Output 패턴 적용
MVC의 한계를 해결하기 위해 MVVM 아키텍처를 적용하여 ViewController의 역할을 단순화하고,
Input/Output 패턴을 도입하여 데이터 흐름을 명확하게 분리하였다.
📌 MVVM 도입 이유
✅ ViewController의 역할 단순화
- ViewController는 UI 업데이트에만 집중하도록 변경
- 네트워크 요청 및 데이터 변환 등의 로직을 ViewModel로 이동하여 역할을 분리
✅ 코드 가독성 및 유지보수성 개선
- ViewModel이 비즈니스 로직을 담당하고, UI와 독립적으로 동작하도록 구성
- ViewController는 UI 이벤트를 ViewModel로 전달하고, ViewModel의 데이터를 구독하여 화면을 업데이트하는 구조로 변경
📌 Input / Output 패턴 적용
✅ 데이터 흐름을 명확하게 구분하여 ViewController와 ViewModel 간 역할을 분리
- Input:
- 사용자가 버튼을 클릭하거나 텍스트를 입력하면 ViewModel로 이벤트 전달
- (예: “검색 버튼 클릭” → ViewModel이 검색 API 호출)
- Output:
- ViewModel이 비즈니스 로직을 처리한 후, ViewController에 가공된 데이터 전달
- (예: “검색 결과” → ViewController가 UI 업데이트)
4️⃣ 적용 결과 및 성과
✅ 코드 가독성 개선
- ViewController는 UI 업데이트에만 집중하며, 네트워크 및 데이터 로직은 ViewModel에서 처리
- 각 클래스의 역할이 명확해지면서 코드 가독성이 향상됨
✅ 유지보수성 향상
- ViewModel을 분리하여 코드 수정 시 영향 범위를 최소화
- 네트워크 요청 및 데이터 가공 로직이 ViewController와 분리되어, 기능 추가 및 변경이 용이해짐
✅ 확장성 확보
- 새로운 기능을 추가할 때, UI와 로직을 독립적으로 관리할 수 있어 확장성이 강화됨
5️⃣ 결론 및 향후 개선 방향
- MVC의 한계였던 View와 ViewController의 강한 결합 문제를 해결하기 위해 MVVM을 도입
- Input/Output 패턴을 적용하여 데이터 흐름을 명확히 관리함으로써, 유지보수성과 가독성을 개선
- 향후에는 Coordinator 패턴을 도입하여, 네비게이션 로직까지 분리하여 화면 전환의 결합도를 낮출 계획
'프로젝트 > LagomStyle' 카테고리의 다른 글
테이블뷰 셀에서 의도치 않게 뷰가 늘어나는 문제 해결 과정 (1) | 2025.01.23 |
---|