고도고도
🍎🍏
고도고도
전체 방문자
13,424
오늘
31
어제
64
  • 분류 전체보기 (170)
    • 🔨 프로젝트 (0)
      • TP 1 (0)
      • WhiteHCCTV (0)
      • FootPrint (0)
    • 💻 개발 (61)
      • iOS (28)
      • Android (6)
      • Kotlin (4)
      • Flutter (9)
      • Node.js (5)
      • Architecture (1)
      • 오늘의 삽질 (7)
      • 에러와의 동침 (1)
    • ✏️ 알고리즘 (6)
      • Graph (6)
      • String (0)
      • Sort (0)
    • ✍️ 코테 준비 (44)
      • Math (1)
      • Implementation (3)
      • String (3)
      • Brute Force (5)
      • Back Tracking (7)
      • Greedy (0)
      • Dynamic Programming (13)
      • Binary Search (1)
      • DFS, BFS (5)
      • Shortest Path (2)
      • Two Pointer (4)
      • MST (0)
    • 📚 CS (6)
      • Operating System (6)
    • ⛹️ 라이프 (53)
      • 2020 겨울방학 모칵코(팀) (13)
      • 2020 겨울방학 모각코(개인) (13)
      • 2021 여름방학 모칵코(팀) (8)
      • 2021 여름방학 모각코(개인) (7)
      • 코딩 테스트 (1)
      • 회고 (10)

블로그 메뉴

  • 홈
  • 깃허브
  • 링크드인

공지사항

인기 글

  • [NCSOFT] 2022 엔씨소프트 썸머 인턴 후기 - 1⋯
    2022.08.10
    [NCSOFT] 2022 엔씨소프트 썸머 인턴 후기 - 1⋯
  • [Flutter] SingleChildScrollView,⋯
    2021.08.18
    [Flutter] SingleChildScrollView,⋯
  • [iOS / SwiftUI] MapKit, 실시간으로 도로⋯
    2022.12.20
    [iOS / SwiftUI] MapKit, 실시간으로 도로⋯
  • [Android] 백그라운드에서 소켓 통신으로 이벤트 수신⋯
    2022.06.08
    [Android] 백그라운드에서 소켓 통신으로 이벤트 수신⋯
  • [iOS / SwiftUI] OnAppear, OnDisa⋯
    2022.12.01
    [iOS / SwiftUI] OnAppear, OnDisa⋯

최근 댓글

  • https://developer.apple.com/docu⋯
    고도고도
  • 게시글 잘 보았습니다. 혹시 주소에서 구를 가지고 오시는⋯
    나그네
  • 혹시 댓글이 안보이는데 .. y2e010924@naver.⋯
    eun
  • 글 솜씨가 뛰어나시네요! 좋은 글 잘 보고 갑니다 다음에도⋯
    alpha-traveler
  • NC......가슴이...웅장해집니다.......🤯
    이상한핑구 🐧

최근 글

  • [Architecture] MVVM + Clean Arch⋯
    2023.01.07
    [Architecture] MVVM + Clean Arch⋯
  • [iOS / SwiftUI] MapKit, 실시간으로 도로⋯
    2022.12.20
    [iOS / SwiftUI] MapKit, 실시간으로 도로⋯
  • [iOS / SwiftUI] OnAppear, OnDisa⋯
    2022.12.01
    [iOS / SwiftUI] OnAppear, OnDisa⋯
  • [에러와의 동침] 22년 11월 4주차
    2022.11.28
    [에러와의 동침] 22년 11월 4주차
  • [iOS / SwiftUI] 스크롤, 무한으로 즐겨요~ (⋯
    2022.11.28
    [iOS / SwiftUI] 스크롤, 무한으로 즐겨요~ (⋯

티스토리

hELLO · Designed By 정상우.
고도고도

🍎🍏

[TIL] 22.03.19
💻 개발/iOS

[TIL] 22.03.19

2022. 3. 19. 19:47

공부한 것

MVC, MVP, MVVM, AAC

알게된 것

1. MVC

우선 가장 일반적으로 사용되는 아키텍쳐 패턴이다. Model, View, Controller 로 나뉜다.

 

Model 은 데이터 생성, 삭제, 갱신 등의 로직이 들어있다.
View 는 사용자에게 보여지는 화면이다.
Controller 는 사용자의 입력을 처리한다.

 

우선 사용자가 View 를 통해서 입력이 들어오고 Controller 가 이를 처리한다. 이 때 입력을 분석해서 Model 과 View 에 갱신 요청을 한다. Model 은 데이터를 갱신하고 View 는 UI 를 갱신한다. 정리하자면, Controller 는 Model 과 View 가 무엇을 해야할 지 알고 있고 이를 통제하고 있다. Controller 를 통해서 Model 과 View 가 연결되어 있으므로 서로 의존성을 띄게 된다. 안드로이드에서는 View 와 Controller 가 Activity, Fragment 에 포함되어 있다. Inflater 와 Listener 를 생각하면 된다.

 

장점

  • 하나의 액티비티 클래스에 비즈니스 로직을 모두 담을 수 있으므로 개발을 빠르고 쉽게 진행할 수 있다.

단점

  • 유지 보수가 어렵다. 또한 위에서 말했던 것처럼 뷰에서 모델을 직접 호출하므로 뷰와 모델의 의존성이 매우 높다. 따라서 테스트 코드 작성이 어려워 진다.

2. MVP

Model 과 View 의 의존성을 줄이기 위해 등장한 아키텍쳐 패턴이다. Model, View, Presenter 로 나뉘고 전체적인 느낌은 비슷하다. 하지만 Model 과 View 가 서로를 직접 참조할 수 없다. 무조건 Presenter 를 통해서만 데이터를 전달할 수 있다.

 

Model 은 데이터 생성, 삭제, 갱신 등의 로직이 들어있다.
View 는 사용자에게 보여지는 화면이다.
Presenter 은 뷰에서 요청한 정보로 모델을 가공하여 뷰에게 전달한다.

 

사용자가 View 를 통해서 입력이 들어오고 Presenter 가 이를 처리한다. Presenter 는 Model 에게 데이터를 요청하고 데이터를 전달받는다. 이후 가공한 데이터를 View 에 전달한다. View 는 데이터를 화면에 보여준다.

 

장점

  • Model과 View의 의존성을 제거했다.

단점

  • View 와 Presenter 의 의존성이 높아졌다. 또한 중복 코드가 발생할 수 있다. 예시를 들어보자. 로그인과 로그아웃은 어플의 기본 기능이 되어버렸다. 이 어플리케이션은 여러 페이지가 있고 로그인 기능의 경우 로그인 액티비티로 이동하여 로그인을 진행한다. 이 때 모든 페이지에 로그아웃 기능을 배치한다고 했을 때 모든 Presenter 에 로그아웃 로직을 배치해야 한다. 어떻게 해결할 수 있을까? 중복된 Presenter 를 분리한 것이 바로 View Model 이다.

3. MVVM

이러한 문제점을 해결하기 위해 등장한 패턴이다. Model, View, View Model 로 나뉜다. 가장 큰 특징은 컴포넌트 분리가 정말 잘 되어 있다는 것이다. 또한 참조하는 것이 명확하다.

Google에서 제공하는 MVVM 아키텍쳐 구조

이를 쉽게 구현할 수 있도록 Android 에서는 Live Data 와 View Model 을 제공한다.

 

Model 은 데이터 생성, 삭제, 갱신 등의 로직이 들어있다.
View 는 사용자에게 보여지는 화면이다.
View Model 은 뷰에서 요청한 정보로 모델을 가공한다.

 

사용자가 View 를 통해서 입력이 들어오고 View Model 에게 명령을 한다. View Model 은 필요한 데이터를 Model 에 요청하고 데이터를 전달받는다. 이후 데이터를 가공한다. 이 때 observer 로 인해 View 가 자동으로 갱신된다.

 

장점

  • View 와 Presenter 의 의존성을 제거했다. 모든 부분이 독립되어 존재하므로 모듈화를 통한 개발이 용이하다. 또한 테스트와 유지보수 또한 용이하다.

공부할 것

MVVM 프로젝트 코드 분석

느낀 점

어제, 오늘 LiveData 와 ViewModel 과 관련하여 정말 많이 찾아본 것 같다. 그래도 아직 어렵고 공부가 많이 필요하다. MVVM 이 손에 익으면 MVP 도 공부도 공부해보려고 한다.

저작자표시 비영리 변경금지

'💻 개발 > iOS' 카테고리의 다른 글

[TIL] 22.03.22  (0) 2022.03.22
[TIL] 22.03.20  (0) 2022.03.20
[TIL] 22.03.17  (0) 2022.03.17
[TIL] 22.03.16  (0) 2022.03.16
[TIL] 22.03.15  (0) 2022.03.15
    '💻 개발/iOS' 카테고리의 다른 글
    • [TIL] 22.03.22
    • [TIL] 22.03.20
    • [TIL] 22.03.17
    • [TIL] 22.03.16
    고도고도
    고도고도
    iOS 꿀잼
    댓글쓰기
    [TIL] 22.03.20
    다음 글
    [TIL] 22.03.20
    [TIL] 22.03.17
    이전 글
    [TIL] 22.03.17

    티스토리툴바