일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 권한
- clean code
- java
- g1
- 스프링부트
- jvm
- Refactoring
- assertj
- spring boot
- JPA
- 리팩토링
- 클린코드
- Spring
- gdg
- 스프링 부트
- 스프링
- tomcat
- 페이징
- load balancing
- 페이스북
- RabbitMQ
- oauth2
- OAuth
- apache
- Producer
- 시큐리티
- GC
- 비동기
- Security
- JWT
Archives
- Today
- Total
허원철의 개발 블로그
Android - MVP 패턴 본문
이번 글은 안드로이드에서 가장 인기있는 패턴인 MVP에 대해 다뤄보도록 하겠습니다.
자바 스프링(백엔드)에서는 MVC 라는 패턴으로 굳혀져 있습니다.
하지만, 안드로이드에서는 MVC, MVP, MVVM 와 같은 다양한 구성을 하고 있습니다.
안드로이드는 특성 상, View와 Controller가 같이 합쳐 있는 형태입니다. 그렇기 때문에 MVC 같은 패턴이 되면, Activity에 굉장히 긴 줄의 소스가 적혀지게 되어 버립니다.
물론! 짧은 줄의 코드와 빠른 결과물을 얻기 위한 작업이라면.. MVC 를 사용하셔도 무방할 것이라고 생각합니다.
1. what ?
2. why ?
3. how ?
1. What ?
- 모든 처리를 Activity가 아니라 Presenter에 넘겨주는 형태
M (Model) : 네트워킹, SharedPreferense 와 같은 데이터를 처리
V (View) : UI 처리와 이벤트를 통해서 Presenter에 넘기는 역할
P (Presenter) : ① View로 부터 이벤트를 전달받아 필요한 처리
② 다시 보여줘야할 데이터가 있다면 View 에 전달
2. Why ?
- 개인으로나 팀으로나 어떤 프로젝트를 하던지 전체적인 구조가 필요하다고 생각합니다. 그 중 MVP는 안드로이드 개발자분들 사이에서 가장 많이 사용되고 있습니다.
① 코드의 양이 줄어듭니다.
② 유지보수가 쉬워집니다.
③ View 와 Model의 결합성이 낮습니다.
④ 테스트 코드 작성이 쉬워집니다.
3. How ?
- 간단하게 MVP 패턴으로 RecyclerView를 만들어 보도록 하겠습니다.
① Gradle 설정
- RecyclerView 라이브러리를 추가하고, MVP 패턴을 사용하기 위해서 라이브러리가 필요한 것은 아니지만 View 바인딩을 편하게 하기 위해서 butterknife 를 추가하였습니다.
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'com.android.support:recyclerview-v7:24.2.1'
compile 'com.jakewharton:butterknife:7.0.1'
}
② Model
- 데이터 처리를 합니다.
③ Presenter
- Model로 부터 받은 데이터를 가공하고 View에 넘겨줍니다.
④ View
- onResume() 에 데이터를 Presenter로 부터 전달 받아, 리사이클러뷰에 갱신 해줍니다.
⑤ 전체적인 흐름
View - onCreate()
View - onResume()
→ Presenter - onResume()
→ Model - getDatas()
← Presenter - onResume()
View - setDatas()
이상으로 기본적인 개념과 예시를 들어보며 MVP에 대해 적어봤습니다.
물론, 아직 부족한 부분이 많기 때문에 다른 개발자분의 블로그를 참고하시기 바랍니다.
'mobile' 카테고리의 다른 글
Android - Data Binding (420) | 2016.12.05 |
---|
Comments