반응형
기본적인 아키텍처 공부를 하기 위해서 처음부터 정리를 해보려고 합니다.
MVC 개요
MVC (Model - View - Controller) 는 iOS의 기본 아키텍처로, UIKit이 처음 등장할 때부터 존재하던 구조입니다.
- Model: 데이터, 비즈니스 로직 (예: User, Product)
- View: 화면 UI, UIKit View들 (UILabel, UIButton 등)
- Controller: View와 Model을 연결하는 다리 역할 (UIViewController)
MVC의 장점
- 간단하다. (학습 곡선 낮음)
- iOS 프레임워크 구조에 완벽히 녹아있다.
- 소규모 앱에서는 빠르게 개발 가능하다.
iOS UIkit을 사용해서 앱을 만들때 만들어지는 가장 기본적인 구조입니다. 문제는 모든 로직인 Controller에 모인다는 겁니다.
문제점 – “Massive View Controller”
MVC가 단순하다는 건 곧, 모든 로직이 Controller로 몰린다는 뜻이에요.
게다가 iOS 는 화면을 만들 때 ViewController가 만들어집니다. MVC지만 VC가 한 덩어리처럼 된다는 겁니다.
class ProfileViewController: UIViewController {
// 1️⃣ Model 데이터 보관
var user: User?
// 2️⃣ View 구성
let nameLabel = UILabel()
let profileImageView = UIImageView()
// 3️⃣ 네트워크 요청
func loadUserData() {
APIService.fetchUser { user in
self.user = user
self.updateUI()
}
}
// 4️⃣ UI 업데이트
func updateUI() {
nameLabel.text = user?.name
profileImageView.image = user?.profileImage
}
// 5️⃣ 버튼 이벤트, 유효성 검사, 네비게이션 이동 등등
}
이 한 파일에…
- 네트워크 로직
- UI 업데이트 로직
- 유효성 검사
- 화면 이동
…이 모두 몰려버립니다.
결과적으로,
- 테스트가 어렵고,
- 유지보수가 힘들며,
- 하나의 화면이 커질수록 지옥이 시작됩니다.
이게 바로 개발자들이 자주 말하는
“Massive View Controller (거대한 뷰컨트롤러)”
문제입니다.
실제로 저도 처음 개발을 했을 때는 하나의 ViewController에 1000줄이 넘어갔습니다. 아키텍처를 모르는 상황에서 화면과 비지니스 로직을 구분하기 위해 extension으로 나눠서 하나의 ViewController를 역할별로 나누기도 했었습니다.
반응형
'iOS > Swift' 카테고리의 다른 글
| VIPER (0) | 2025.12.06 |
|---|---|
| MVVM (Model-View-ViewModel) (0) | 2025.12.05 |
| iOS에서 UI 변경이 바로 적용되지 않는 이유 (0) | 2025.05.09 |
| ViewModel의 위치? View vs ViewController (0) | 2025.05.07 |
| swift의 소유권 개념 (0) | 2025.04.28 |