Open yoogail105 opened 2 years ago
Model
View
Controller
distribution
Testability
Ease of use
target
button.addTarget(self, action: #selector(barButtonPressed(_:)), for: .touchUpInside)
Delegate 패턴
UITableViewDelegate
UITableViewDataSource
Observer패턴
Notification
KVO
1. MVC
1-1. Traditional MVC
Model
-View
-Controller
🖍 Traditional MVC와 좋은 아키텍쳐 요소
distribution
: ViewController에게 많은 권한이 집중되어 단일 책임 원칙과 어긋난다.Testability
: View, Controller를 명확하게 분리하기 어려워 재사용성 떨어지고, 유닛 테스트 진행하기 어려워진다.Ease of use
: ViewController에 많은 코드가 작성되어 복잡해지고, 유지보수하기 힘들어 진다. ****1-2. cocoaMVC
실제 cocoaMVC의 동작
Model
-View
-Controller
Model
과View
를 분리하여 독립성Controller
가View
와Model
의 중재자 역할View
가 사용자의 동작을 인식Controller
는View
로부터 사용자의 액션을 받아,Model
에게 어떤 작업을 해야하는지 알려줌Controller
는Model
의 데이터 변화를 View에 전달하여,View
를 어떻게 업데이트할지 알려줌🔎 MVC 역할
Model
: 앱의 데이터와 비즈니스 로직View
: 사용자에게 데이터를 보여주거나, UI 담당Controller
:Model
-View
의 연결, 중재자 역할View
를 포함,View
의 Life cycle 관리📬 MVC가 소통하는 방법
📨 Controller → View / Model
📨 View → Controller
target
을 만들어둔다.target
이 이를 받아서 알맞은 동작을 수행한다.button.addTarget(self, action: #selector(barButtonPressed(_:)), for: .touchUpInside)
Delegate 패턴
을 이용하여 Controller에게 어떤 작업을 수행할지 알린다.UITableViewDelegate
,UITableViewDataSource
📨 Model → Controller
Observer패턴
을 이용해 Controller에 신호를 보낸다.Notification
,KVO
📊 MVC 패턴 장단점
📈 장점
📉 단점
🖍 MVC와 좋은 아키텍쳐 요소
distribution
: Model과 View의 독립. 그러나 ViewController가 밀접하게 연관 → 독립성 XTestability
: View, Controller를 명확하게 분리하기 어려움, Model만 테스트 가능Ease of use
: 다른 패턴에 비해 전체 코드의 길이는 짧으나, 독립적이지 않아 유지보수 어려움🔖 참고