4T2F / ThinkBig

🌟씽크빅 스터디🌟
5 stars 1 forks source link

MVC, MVP, MVVM 등 다른 아키텍처 패턴과 Clean Architecture를 비교했을 때, iOS 개발에 있어서 Clean Architecture의 독특한 장점은 무엇이라고 생각하시나요? #14

Open hamfan524 opened 9 months ago

hamfan524 commented 9 months ago

MVC, MVP, MVVM 등 다른 아키텍처 패턴과 Clean Architecture를 비교했을 때, iOS 개발에 있어서 Clean Architecture의 독특한 장점은 무엇이라고 생각하시나요?

hamfan524 commented 9 months ago

클린 아키텍처

image-2

image-1

  1. 관심사의 분리: 코드를 엔티티, 유스케이스, 인터페이스 어댑터, 프레임워크 및 드라이버 등의 레이어로 명확히 분리하여 각 레이어가 독립적인 책임을 갖습니다. 기본적으로는 아래의 세가지 레이어가 필요합니다.
    • Presentation layer
    • Business Logic layer
    • Data Access layer
  2. 테스트 용이성: 분리된 구조 덕분에 각 레이어, 특히 도메인과 유스케이스 레이어를 독립적으로 테스트하기 쉽습니다.
  3. 유지보수 및 확장성: 한 레이어의 변경이 다른 레이어에 영향을 미치지 않아 시스템이 더 유지보수하기 쉽고 확장성이 뛰어납니다.
  4. 프레임워크 독립성: 프레임워크에 크게 의존하지 않아 외부 라이브러리나 프레임워크의 변경에 강한 시스템을 만들 수 있습니다.
  5. 비즈니스 로직 중심: UI나 프레임워크보다 일반적으로 변동성이 적은 비즈니스 로직과 규칙에 중점을 두어 다른 레이어의 변경에도 견딜 수 있습니다.

MVC (모델-뷰-컨트롤러)

장점

  1. 간단함: 이해하기 쉽고 널리 알려진 패턴입니다.
  2. 프레임워크 지원: Apple이 UIKit에서 직접 지원하여 iOS 개발에 자연스러운 선택입니다.
  3. 관심사의 분리: 프레젠테이션, 비즈니스 로직, 데이터 액세스 레이어를 분리하지만, 실제로는 ViewController가 비대해지는 문제가 있습니다.

클린 아키텍처 대비 단점

  1. 테스트 용이성: MVC는 비즈니스 로직이 ViewController와 충분히 분리되지 않으면 단위 테스트가 어려울 수 있습니다.
  2. 레이어 결합: ViewController가 여러 관심사의 중심점이 되어 클린 아키텍처만큼 모듈화되지 않습니다.

MVP (모델-뷰-프레젠터)

장점

  1. MVC보다 나은 테스트 용이성: 프레젠터는 MVC의 ViewController보다 테스트하기 쉽습니다.
  2. 분리: 비즈니스 로직과 UI 코드를 MVC보다 잘 분리합니다.

클린 아키텍처 대비 단점

  1. 비대한 프레젠터: 관리가 잘 되지 않으면 큰 프레젠터가 생길 수 있습니다.
  2. 레이어 상호작용: 레이어 간 상호작용이 클린 아키텍처만큼 유연하지 않습니다.

MVVM (모델-뷰-뷰모델)

장점:

  1. 바인딩: MVVM은 데이터 바인딩에 강력한 기능을 제공합니다.
  2. UI와 비즈니스 로직 분리: 뷰모델이 많은 로직을 처리합니다.
  3. 테스트 용이성: 뷰모델은 MVC의 ViewController보다 테스트하기 쉽습니다.

클린 아키텍처 대비 단점

  1. 복잡성: MVVM은 상태 관리와 뷰와 뷰모델 간의 상호작용에서 복잡해질 수 있습니다.
  2. 뷰모델 비대화: 관리가 잘 되지 않으면 큰 뷰모델이 생길 수 있습니다.

결론

클린 아키텍처는 분리도, 테스트 용이성, 비즈니스 로직 중심성 등에서 강점을 가지며, 복잡한 iOS 애플리케이션에서 이러한 요소들이 중요할 때 효과적인 선택입니다. 그러나 간단한 애플리케이션의 경우 MVC, MVP, MVVM에 비해 더 복잡하고 오버헤드가 클 수 있습니다. 프로젝트의 특정 요구사항과 규모, 그리고 팀의 아키텍처에 대한 이해도에 따라 선택이 달라질 수 있습니다.

Reference

https://velog.io/@mmim/iOS-Clean-Architecture

ha-nabi commented 9 months ago

좋은 글 잘 읽었습니다 언제 한번 꼭 다뤄볼 주제라고 생각했기에 개인적으로 찾아봤는데요, 궁금한게 있습니다

MVVM은 MVC, MVP의 각각의 컨트롤러, 프레젠터가 감당할 수 없을 만큼 비대해져서 이걸 어떻게 해결할까 고민하다가 나온 패러다임중 하나라고 생각합니다

그러면 MVVM의 뷰모델이 너무 비대해져서 감당할 수 없을만큼의 코드량이 쌓이면 그 때는 어떤 아키텍쳐를 고민해야하는지 궁금합니다

kmh5038 commented 9 months ago

MVC -> MVP -> MVVM -> 클린아키텍쳐 순서별로 단점을 보완하고 심화되는 단계라 생각해도되나요?

hamfan524 commented 9 months ago

좋은 글 잘 읽었습니다 언제 한번 꼭 다뤄볼 주제라고 생각했기에 개인적으로 찾아봤는데요, 궁금한게 있습니다

MVVM은 MVC, MVP의 각각의 컨트롤러, 프레젠터가 감당할 수 없을 만큼 비대해져서 이걸 어떻게 해결할까 고민하다가 나온 패러다임중 하나라고 생각합니다

그러면 MVVM의 뷰모델이 너무 비대해져서 감당할 수 없을만큼의 코드량이 쌓이면 그 때는 어떤 아키텍쳐를 고민해야하는지 궁금합니다

ViewModel이 너무 많은 작업을 수행하는 경우 이를 여러 ViewModel로 분할해야 할 때일 수 있습니다. 각 ViewModel은 단일 책임을 갖고 UI의 일부만 관리해야 합니다. 이 접근 방식은 객체 지향 프로그래밍에서 큰 클래스를 분할하는 것과 유사합니다.

또는 코디네이터 패턴을 적용하는 방법도 있습니다. 코디네이터 패턴은 ViewModel과 별도로 탐색 및 애플리케이션 흐름을 관리하는 데 도움이 될 수 있습니다. 코디네이터는 복잡한 탐색 논리와 같이 ViewModel에 빽빽이 들어차 있을 수 있는 일부 책임을 맡을 수 있습니다.

하지만 SwiftUI는 선언적, 상태(State) 중심의 프레임워크이기 때문에 각 아키텍처의 표준 구현은 SwiftUI 앱에 적합하지 않습니다.

Clean Architecture, Viper 또는 패턴 조합과 같은 다른 패턴을 고려해보는게 좋습니다. 예를 들어 클린 아키텍처는 문제를 별개의 레이어로 분리하는 것을 강조하여 복잡성을 더 잘 관리하는 데 도움이 될 수 있습니다.

MVC -> MVP -> MVVM -> 클린아키텍쳐 순서별로 단점을 보완하고 심화되는 단계라 생각해도되나요?

맞습니다. 이들은 각각의 단점을 보완하고, 특정한 문제들을 해결하기 위해 개발되었으며, 일정한 방식으로 진화해왔다고 볼 수 있습니다.

  1. MVC (Model-View-Controller)

단점: 뷰와 모델이 강하게 연결되어 있어, UI와 비즈니스 로직의 분리가 쉽지 않습니다. 컨트롤러가 모델과 뷰 사이의 의존성으로 인해 복잡해질 수 있습니다. 보완점: MVP와 MVVM은 이러한 단점을 개선하기 위해 등장했습니다.

  1. MVP (Model-View-Presenter)

단점: 프레젠터가 뷰와 모델 사이에서 중개하는 역할을 하기 때문에, 프레젠터가 복잡해질 수 있습니다. 또한, 뷰와 프레젠터 간의 강한 결합이 문제가 될 수 있습니다. 보완점: MVVM은 이러한 결합을 느슨하게 하고, 데이터 바인딩을 통해 뷰의 로직을 줄이는 방향으로 발전했습니다.

  1. MVVM (Model-View-ViewModel)

단점: 복잡한 데이터 바인딩으로 인해 디버깅이 어려울 수 있습니다. 또한, 큰 프로젝트에서 ViewModel이 과도하게 복잡해질 수 있습니다. 보완점: 클린 아키텍처는 이러한 복잡성을 줄이고, 더 명확한 분리를 통해 유지 보수성을 향상시키려는 목적을 가지고 있습니다.

  1. 클린 아키텍처 (Clean Architecture)

특징: 각 계층의 명확한 분리를 통해 시스템의 유연성과 유지 보수성을 높입니다. 이는 MVVM과 같은 패턴을 포함하여 다양한 아키텍처와 결합될 수 있습니다. 보완점: 클린 아키텍처는 특정 아키텍처의 단점을 보완하기보다는, 소프트웨어 설계의 근본적인 원칙에 중점을 두고 있습니다.

종합적으로, 이러한 패턴들은 서로의 단점을 보완하며 발전해왔으며, 각각의 패턴은 특정한 상황과 요구 사항에 맞춰 선택되어 사용됩니다.