TIL은 편한 말투로 작성됩니다~
📍 오늘 학습한 내용 정리
1. 알고리즘에 사용되는 문법 정리
2. MVC, MVVM 패턴 공부
알고리즘에 사용되는 문법 정리
알고리즘 문제를 풀 때 자주 사용된다고 느꼈던 함수, 메서드 등을 정리했다. 앞으로도 문제를 풀다가 자주 사용되는 문법이 있으면 추가로 정리할 예정이다. [Swift/Algorithm] 알고리즘에 자주 사용되는 문법 정리
아키텍처를 사용하는 이유
앱을 개발할 때 아키텍처를 설계하는 이유는 코드의 가독성, 유지보수성, 확장성을 높이기 위해서 사용된다.
iOS에서는 대표적으로 MVC(Model-View-Controller)와 MVVM(Model-View-ViewModel) 두 가지 패턴이 많이 사용된다.
MVC(Model-View-Controller)
MVC는 오랫동안 사용되어 온 아키텍처 패턴으로, 앱의 구조를 모델(Model), 뷰(View), 컨트롤러(Controller)의 세 개의 역할로 분리한 것이다.
MVC 패턴 구조
- Model : 데이터 및 비즈니스 로직을 담당
- View : 사용자에게 보여지는 UI 요소
- Controller : 사용자의 입력(Action)을 받고 처리하는 부분 (Model과 View의 중개자 역할)
MVC 패턴 동작
- 사용자가 View(UI)에서 동작을 수행하면
- Controller는 사용자 입력을 받아 Model에게 데이터 요청
- Model이 처리한 결과를 반환
- Controller가 결과를 View에게 전달
- View(UI)가 업데이트되어 사용자에게 보여줌
MVC 패턴의 장/단점
- 장점
- 직관적이고 간단한 구조
- iOS에서 기본적으로 권장하는 패턴
- 소규모 프로젝트에 적합
- 많은 개발자들에게 친숙한 패턴이기 때문에 개발자들이 쉽게 유지보수 가능
- 단점
- 코드 재사용성이 떨어지고, 유닛 테스트를 진행하기 어렵다.
- 대부분의 코드가 Controller에 밀집되어 크기가 비대해지고 구조가 복잡해진다. (Massive View Controller 문제)
- 프로젝트의 규모가 커질수록 유지보수가 힘들어진다.
MVVM(Model-View-ViewModel)
MVVM은 MVC의 복잡한 Controller 문제를 개선하기 위해 나온 구조로, View와 Model 사이에 ViewModel을 두어 UI 관련 로직을 분리한다.
MVVM 패턴 구조
- Model : 데이터 및 비즈니스 로직을 담당
- View : 사용자에게 보여지는 UI요소
- ViewModel : UI와 모델을 연결하는 중간 계층, 비즈니스 로직과 UI 로직을 처리
MVVM 패턴 동작
- 사용자가 View(UI)에서 동작을 수행하면
- View가 ViewModel에 사용자 입력을 전달
- ViewModel이 Model에게 데이터 요청 및 처리
- Model이 처리한 데이터를 반환
- ViewModel이 반환된 데이터를 받아 View에게 전달
- View(UI)가 자동 업데이트하여 사용자에게 보여줌
MVVM 패턴의 장/단점
- 장점
- 코드 재사용성이 높음
- UI 로직을 ViewModel에서 처리하여 컨트롤러가 가벼워짐
- 테스트하기 쉬움 (ViewModel을 단위 테스트 가능)
- 단점
- UIKit에서는 데이터 바인딩이 기본 제공되지 않기 때문에, RxSwift나 Combine 등의 프레임워크가 필요할 수 있음
- View Model의 설계가 쉽지 않다. (구조가 상대적으로 복잡함)
MVC vs MVVM 비교
비교 항목 | MVC | MVVM |
---|---|---|
구조 | Model-View-Controller | Model-View-ViewModel |
컨트롤러 역할 | 크고 복잡해질 수 있음(Massive View Controller) | ViewModel이 UI 로직을 분리하여 컨트롤러가 가벼워짐 |
코드 재사용성 | 낮음 | 높음 (ViewModel 재사용 가능) |
유지 보수성 | 코드가 많아지면 어려움 | ViewModel을 통한 분리가 되어 유지 보수 용이 |
테스트 가능성 | 어렵고 제한적 | 용이(ViewModel 단위 테스트 가능) |
언제 어떤걸 선택해야할까?
- 소규모 프로젝트, 빠른 개발이 필요할 때 -> MVC 패턴
- 유지 보수성과 확장성이 중요한 경우 -> MVVM 패턴
- RxSwift와 결합하여 반응형 UI를 구현할 경우 -> MVVM 패턴
'🖋️ TIL Journal' 카테고리의 다른 글
05.12 (월) iOS 사전캠프 (0) | 2025.05.12 |
---|---|
05.08 (목) iOS 사전 캠프 (0) | 2025.05.08 |
05.02 (금) iOS 사전 캠프 (1) | 2025.05.02 |
05.01 (목) iOS 사전 캠프 (0) | 2025.05.01 |
04.30 (수) iOS 사전 캠프 (0) | 2025.04.30 |