반응형
오늘은 mvp에 대해 알아보려 합니다.
왜냐하면!!!? 제가 지금까지 7~8개월을 mvp 패턴을 이용해 만들어 왔지만...
아무도 얘기해주는 사람이 없었기에 막 쓰고 있었던것이었던것이었습니다....(선임이나 누가 도와줬으면...)
아무래도 스타텁에 다니다 보니 혼자 개발했고, 스터디에서도 혼자 개발하다보니 참 하하하호호호 하네요
MVP에 대해 "잘" 알고 넘어가야 MVVM에 대해 이해하기가 편할거 같아 다시 공부하면서 정리해봤던 내용들입니다.
-
MVP : 컨트롤러의 책임에 묶이지 않고도 V와 Activity가 자연스럽게 결합하도록 합니다.
- Model : "*비즈니스 로직"으로, 내부적으로 쓰이는 데이터를 저장하고 처리하는 역할.
- 데이터 + 상태 + 비즈니스 로직 입니다.
- Data를 말함. 단순 데이터가 아닌 데이터를 "관리/수집/수정" 등을 하게 되는 부분이며, 데이터를 Cache해야 한다면, 이 M에서 Cache할 수 있고, 단순 전달만 할 수도 있다. Data의 전반적인 부분을 model에서 담당하고, 네트워크, 로컬 데이터 등을 포함
- Repository : Remote/Local 을 구분하며, Memory Cache를 포함
- Remote : 서버를 통한 데이터를 불러온다.
- Local : 단말기 상의 SQL, Realm 등을 통한 데이터를 불러온다.
- View : UI, 데이터를 "보여"주거나 "액션", "Lifecycle"을 감지해 P에 보내는 역할.
- Activity/Fragment가 이제 V의 일부로 간주된다는 것입니다. 따라서 이들이 서로에게 연관되는 자연스러운 현상을 극복할 필요가 없습니다. A가 V 인터페이스를 구현해서 P가 코드를 만들 인터페이스를 갖도록 하는 것이 좋습니다. 이렇게 하면 특정 V와 결합되지 않고 가상 V를 구현해서 간단한 유닛 테스트를 실행할 수 있죠.
- 사용자의 실질적인 이벤트가 발생하고, 이를 처리 담당자인 P로 전달
- 완전한 V의 형태를 가지도록 설계합니다. 계산을 하거나, 데이터를 가져오는 등의 행위는 P에서 처리하도록 구현.
- Presneter : 뷰(View)와 모델(Model) 사이에서 자료 전달 역할
- 본질적으로는 MVC의 C와 같지만, V에 연결되는 것이 아니라 그냥 인터페이스라는 점이 다릅니다. 이에 따라
MVC가 가진 테스트 가능성 문제와 함께 모듈화/유연성 문제 역시 해결합니다. 사실 극단적으로 MVP를 따르는 사람들은 P가 절대로 어떤 안드로이드 API나 코드라도 참조 해서는 안된다고 주장합니다. - V에서 전달받은 이벤트를 처리하고, 이를 다시 V에 전달
- V와는 무관한 Data등을 가지고, 이를 가공하고, V에 다시 전달하는 역할
- V와 관련된 것은 절대 없어야 함.
- 본질적으로는 MVC의 C와 같지만, V에 연결되는 것이 아니라 그냥 인터페이스라는 점이 다릅니다. 이에 따라
- Presenter 문제
- 유지 보수 : C처럼 P에도 시간이 지남에 따라 추가 비즈니스 로직이 모이는 경향이 있습니다. 시간이 흐른 후 개발자는 거대하고 다루기 어려운데다 문제가 발생하기 쉽고 분리 하기도 어려운 P를 발견하게 되죠.
- View만 존재할 경우 따로 M, P를 만들 필요는 없다.
- Model : "*비즈니스 로직"으로, 내부적으로 쓰이는 데이터를 저장하고 처리하는 역할.
-
일반적인 플로우
- View에서 (Touch) Event 발생
- V → P에 Event 전달
- P에서 이벤트 형태에 따라 Cache Data를 가져오거나 M에 요청을 함.
- M은 P에서 Data를 요청을 받아 Local이나 Sever에서 Data를 가져온다.
- P는 M로부터 Data를 받는다.
- P에서 가지고 있는 Data를 기반으로 V에 전달한다.
- V에서 화면을 갱신한다.
*비즈니스 로직 : Business logic은 컴퓨터 프로그램의 규칙에 따라 데이터를 생성·표시·저장·변경하는 부분을 말합니다. 데이터베이스, 표시 장치 등 프로그램의 다른 부분과 대조되는 개념으로 쓰입니다.
이해가 가시나요? 즉,
Model 은 데이터를 가지고 요래 저래 하는 역할이고
Presenter 는 Model 과 View를 연결하는 "다리" 역할,
View 는 이벤트를 감지하면 Presenter에게 Model의 데이터를 요청해 가져와 "보여주는" 역할을 하는 겁니다.
저는 Presenter에서 데이터를 가공하고 이래저래 하고 Model은 필요한 애들만 가져다 데이터를 요래저래 했었는데..
왜그랬나 싶네요 ㅠㅠ 독학은 잘 "이해"하고 넘어가야합니다....!
전 좀 더 이해하고 바로 MVVM을 정리해보겠습니다!!!
모두 화이팅!!!
반응형
'Android' 카테고리의 다른 글
앱에서 tagging 작업 시 debug 모드에서 보는 방법! (0) | 2019.06.14 |
---|---|
앱 개발 초보자가 알아가야 할 간단한 플로우?지식? (0) | 2019.06.14 |
android 에서 font 사용 시 필요한 "용량"!!! (0) | 2019.01.05 |
multi notification 보낼 시 참고 (0) | 2019.01.03 |
Google map api 적용하기 (0) | 2018.12.20 |