어떠한 제한을 걸어 오류가 발샐할 수 있는 부분을 줄이는 것!
여기서 중요한 것은 적젉한 제한을 걸어 생산성, 가독성을 높이고 버그유발을 줄이는 것
최근 모자일에서의 전쟁은 조그마한 기기에서 제한된 리소스를 적잘하게 활용할 수 있도록 하는 것이다!
모델, 뷰, 프레센터로 이루어진 아키텍쳐이다
즉 Presneter 는 Back에서 내려주는 데이터를 정리하여 View에게 전달하는 것이다.

여기서 중요한 부분은 View는 Presenter를 인지하고 Presenter또한 View를 인지한다는 것이다.
또한 2가지는 서로 1:1매칭이 된다는 것이다.(재활용성도 매우 떨이짐)
여기서 문제가 발생하는데 바로 Memory leak 이 발생할 수 있다.
사용안하는 객체, 메모리가 누적되어 메모리가 터지는 현상
그렇다멘 Memory leak 이 발생하는 원인은 무엇일까?🤔 !!순환참조!!
처음에는 순환참조가 뭐지... 했지만 멘토님의 설명을 통해 알 수 있었다.
순환참조는 a가 b를 생성하고 b가 a를 생성하는 즉 서로가 서로를 바라보는 상황에서 발생할 수 있다.
해당 경우 필요에 따라 참조를 끊어야 하지만 해당 과정을 생략할 경우 메모리에 남아있어 메모리 릭이 발생한다.
이를 해결하기 위해 Prenster가 View를 알지 못하게 할 필요가 있다.
(순환참조 예제 코드)
struct ContentView: View {
let presenter = MyPresenter()
var string = "Hello"
var body: some View {
VStack {
Spacer()
Button("Hello") {
presenter.provideData()
}
Spacer()
}
.onAppear {
presenter.view = self
}
}
}
class MyPresenter {
var view: ContentView!
func provideData() {
view.string = "some word"
}
}
해당 문제를 해결하기 위해 Swift에서는 약한참조 즉 weak keyword를 제공한다.

위의 MVP의 문제를 해결하기 위해 등장한 것이 바로 MVVM이다.
Memory leak의 발생을 막기위해 2가지 방법을 사용하는데
그렇다면 옵져버 패턴은??

그렇다면 MVVM에서는 어떻게 사용할까