
객체 지향 프로그래밍 설계 시 자주 발생하는 문제를 해결하기 위해 디자인 패턴을 사용합니다. 특히 여러 사람이 협업하는 개발 환경에서, 다른 사람이 작성한 코드나 기존 코드를 이해하고 수정하는 것은 매우 어려운 작업입니다. 코드를 변경하거나 새로은 기능을 추가할 때 의도하지 않은 결과나 버그를 발생할 수 있으며, 성능 최적화도 까다롭습니다. 이러한 문제를 방지하고 개발 시간 및 비용을 절약하기 위해 디자인 패턴을 활용합니다. 디자인 패턴은 공통 문제에 대한 검증된 해결책을 제공함으로써, 코드의 가독성과 재사용성을 높이고, 팀 내의 기술적 의사소통을 원활하게 합니다.
MVC ⇒ Model + View + Controller 를 합친 용어

Model : 어플리케이션에서 사용되는 데이터와 비지니스 로직을 관리하는 부분
View : 사용자에게 보여지는 UI 부분
Controller : Model과 View 사이를 이어주는 인터페이스 역할
MVC 패턴의 동작 순서
Controller 는 여러개의 View 를 선택할 수 있는 1:n 구조입니다.
MVC 패턴의 단점은 View와 Model 사이의 의존성이 높다는 것입니다.
복잡한 대규모 프로그램을 개발하게 되면 문제점이 발견됩니다.
→ 다수의 View와 Model이 Controller를 통해 복잡하게 연결될 수 있기 때문에 Controller가 뚱뚱해지게 됩니다.
→ 이러한 현상을 Massive-View-Controller현상이라고 합니다.
→ 수정시 테스트가힘들고, 파악이 어렵기 때문에 여러 Side-Effect를 불러오게 되는 문제점 발생합니다.
→ 그래서 MVC는 위 문제점을 보완하기 위해 다양한 패턴들을 파생시켰습니다.(MVP, MVVM, Flux, Redux 등)
MVP ⇒ Model + View + Presenter를 합친 용어
Model 과 View는 MVC 패턴과 동일하고, Controller 대신 Presenter가 존재합니다.
기존의 MVC 패턴을 보안하기 위한 패턴이며 MVC 의 Model View가 의존 관계였던걸 해결하기 위해 고안된 패턴입니다.

Model : 어플리케이션에서 사용되는 데이터와 비지니스 로직을 관리하는 부분
View : 사용자에게 보여지는 UI 부분
Presenter : View에서 요청한 정보를 Model로 가공하여 View에 전달해 주는 부분
MVP 패턴의 동작 순서
Presenter는 View와 Model의 인스턴스를 가지고 있어 둘을 연결하는 접착제 역할을 합니다.
Presenter와 View는 1:1 관계입니다.
MVP 패턴의 장점은 View와 Model의 의존성이 없다는 것입니다.
MVP 패턴은 MVC 패턴의 단점이었던 View와 Model의 의존성을 해결하였습니다.
MVP 패턴은 앱을 구성하는 코드를 기능단위로 분해(모듈화)하기 때문에 협업시 유리해졌습니다.
모듈화를 했기 때문에 소스파일 관리, 테스트가 용이 해집니다. → 유지보수가 쉬워집니다.
MVC 패턴의 단점인 View와 Model 사이의 의존성은 해결되었지만, View와 Presenter 사이의 의존성이 높은 가지게 되는 단점이 있습니다.
어플리케이션이 복잡해 질 수록 View와 Presenter 사이의 의존성이 강해지는 단점이 있습니다.
MVVM ⇒ Model + View + View Model를 합친 용어

Model : 어플리케이션에서 사용되는 데이터와 비지니스 로직을 관리하는 부분
View : 사용자에게 보여지는 UI 부분
View Model : View를 표현하기 위해 만든 View를 위한 Model입니다. View를 나타내 주기 위한 Model이자 View를 나타내기 위한 데이터 처리를 하는 부분
MVVM 패턴의 동작 순서
MVVM 패턴은 Command 패턴과 Data Binding 두 가지 패턴을 사용하여 구현되었습니다.
Command 패턴과 Data Binding을 이용하여 View와 View Model 사이의 의존성을 없앴습니다.
View Model과 View는 1:n 관계입니다.
Data Binding : Model과 UI 요소 간의 싱크를 맞춰주는 것