You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
아키텍처 패턴이란?
아키텍처는 소프트웨어 프로그램의 책임에 따른 분리 방법으로 볼 수 있다.
패턴이란 어떤 반복되는 현상이나 무늬로, 아키텍처 패턴은 어떤 문제를 해결하기 위해 정형화된 분리 방법이라고 할 수 있다.
Model(모델)의 역할
모델은 애플리케이션이 가지고 있는 데이터와 이 데이터를 가공해서 유저에게 제공하는 비지니스 로직을 담당한다
View(뷰)의 역할
가공된 데이터를 사용자에게 화면을 통해 보여주는 역할
Controller(컨트롤러)의 역할
이 부분에 대한 논의가 많은데 Cocoa MVC에서 컨트롤러는 모델과 뷰의 중개자 역할을 한다.
2-2. MVC의 문제점
애플리케이션이 커질수록 컨트롤러의 역할이 커진다. 컨트롤러가 비대해지고 모델과 뷰와 결합이 단단해질수록 확장성이 떨어지는 유연하지 않은 소프트웨어가 될 것이다. 사실 iOS 개발에서의 MVC에서는 View와 Controller의 분리가 무색할 만큼 서로 긴밀히 엮여있다. 프로젝트를 시작하면 기본적으로 만들어있는 것이 ViewController일 만큼 이미 결합되어있는 상태이다.
2-3. MVVM이란?
MVVM 패턴이란 MVC의 Controller가 ViewModel(뷰모델)로 바뀐 패턴이다.
MVC랑 비교해서 뭐가 바뀐거지?
MVC의 문제점은 결국 VC가 비대해짐으로써 유연성이 떨어지게 된다. 많은 로직들이 섞여있게 되고 테스트가 힘들어지게 된다.
이를 해결하기 위해 ViewController는 View를 담당하게 되었고, View와 Model을 연결하는 ViewModel이라는 녀석이 등장하게 된다.
(사실 이 부분에 대해서는 이해가지 않는 부분이 있어서 계속해서 찾아보고 있다. 사실 Model이 비지니스 로직을 담당하고 있다면 Contoller에 남게 되는 것은 화면에 띄우는 로직일텐데 Model의 데이터를 바인딩 하기위한 Delegate 등이 모여있다고 해도 Controller의 비대함 자체는 child Controller들을 가짐으로써 적절한 책임 분배로 해결될 수 있는 부분이 아닌가라는 생각이다. 결국 MVVM은 테스트를 위한 아키텍처 패턴이라는인가)
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
1. Combine
그래서 Reative framework가 뭔데? 그래서 어떻게 쓰는 건데? 라는 생각이 든다면
우선 간단한 아티클을 하나 읽고 시작하자. Swift에서 Combine 시작하기라는 블로그 글이다.
1-1. Publisher
<Output, Failure>Subject는 스트림 밖에서send()를 통해 스트림 안으로 값을 주입할 수 있다1-2. Operator
collectmapflatMapreplaceEmptyfiltercompactMapfirstlastprefix1-3. Subscriber
<Input, Failure>Subscriber의Input은 구독하고 있는Publisher의Output과 같은 타입이어야 한다.그렇다면 Subscriber는 어떻게 Publisher를 구독하는 것일까?
현재 Combine은 쉽게 사용할 수 있는 2가지 Subscribe 방식(
sink,assgin)을 제공한다.sinkassign1-4. Subscriptions
출처 : https://icksw.tistory.com/272?category=937485
cancel()만 있다store()라는 메서드가 존재한다.1-5. Combine for Networking
URLSession과 결합한 형태의 Publisher
JSON data를 보내주는 URL을 통해 직접 data를 받아볼 수 있다.
Combine을 통한 간단한 Codable 이용
2. MVVM
2-1. MVC란?
Model, View, Controller로 이루어진 아키텍처 패턴이다.
Model(모델)의 역할
모델은 애플리케이션이 가지고 있는 데이터와 이 데이터를 가공해서 유저에게 제공하는 비지니스 로직을 담당한다
View(뷰)의 역할
가공된 데이터를 사용자에게 화면을 통해 보여주는 역할
Controller(컨트롤러)의 역할
이 부분에 대한 논의가 많은데 Cocoa MVC에서 컨트롤러는 모델과 뷰의 중개자 역할을 한다.
2-2. MVC의 문제점
애플리케이션이 커질수록 컨트롤러의 역할이 커진다. 컨트롤러가 비대해지고 모델과 뷰와 결합이 단단해질수록 확장성이 떨어지는 유연하지 않은 소프트웨어가 될 것이다. 사실 iOS 개발에서의 MVC에서는 View와 Controller의 분리가 무색할 만큼 서로 긴밀히 엮여있다. 프로젝트를 시작하면 기본적으로 만들어있는 것이 ViewController일 만큼 이미 결합되어있는 상태이다.
2-3. MVVM이란?
MVVM 패턴이란 MVC의 Controller가 ViewModel(뷰모델)로 바뀐 패턴이다.
MVC랑 비교해서 뭐가 바뀐거지?
MVC의 문제점은 결국 VC가 비대해짐으로써 유연성이 떨어지게 된다. 많은 로직들이 섞여있게 되고 테스트가 힘들어지게 된다.
이를 해결하기 위해 ViewController는 View를 담당하게 되었고, View와 Model을 연결하는 ViewModel이라는 녀석이 등장하게 된다.
(사실 이 부분에 대해서는 이해가지 않는 부분이 있어서 계속해서 찾아보고 있다. 사실 Model이 비지니스 로직을 담당하고 있다면 Contoller에 남게 되는 것은 화면에 띄우는 로직일텐데 Model의 데이터를 바인딩 하기위한 Delegate 등이 모여있다고 해도 Controller의 비대함 자체는 child Controller들을 가짐으로써 적절한 책임 분배로 해결될 수 있는 부분이 아닌가라는 생각이다. 결국 MVVM은 테스트를 위한 아키텍처 패턴이라는인가)
ViewModel의 역할은?
Beta Was this translation helpful? Give feedback.
All reactions