1. 안드로이드 MVC 패턴이란?
M-model / V-view / C-controller 로 구조를 나눠서 개발을 할수 있는 아키텍처 패턴을 말한다.
해당 패턴을 이용하여 파일 구조를 나누는 이유는 개발자들끼리 협업하는 용이해지고, 유지보수와 확장성에 효율적이다.
그렇지만 흔히 알고있는 MVC 패턴은 안드로이드에 적용할 수 없다.
안드로이드는 내부 API 에 종속적이라 웹과는 살짝 다른 형태를 갖고 있다.
MVC 패턴 Flow
1. 뷰(액티비티/프래그먼트)로부터 사용자 이벤트 발생
2. 모델로부터 데이터 갱신이 필요한지 확인
3. 모델로부터 전달받은 데이터를 통해 뷰를 갱신여부 판단
4. 뷰에서 UI 갱신처리
장점
- 직관적이다.
- 구현하기 쉽다.
- 모델과 뷰가 분리되어 모델 재활용이 가능하다.
단점
- 모델과 뷰 사이에 의존성이 아예 없지 않다. 그 이유는 모델 값이 바뀌면 뷰 업데이트를 직접 처리 해야한다.
- 로직이 복잡해지면 유지보수가 힘들다.
- 컨트롤러가 안드로이드 API 에 깊게 종속되므로, 테스트 또한 어려워진다.
- 모든 처리가 컨트롤러에서 수행되므로 크다기 이 부분에 집중적으로 쌓여서 나중에 알아보기 쉽지 않다.
- 안드로이드 특성상 액티비티가 뷰 표시와 컨터롤러 역할을 같이 수행하기에 두 요소의 결합도가 높아진다.
2. MVVM 과 MVP 차이는 무엇인가?
MVVM 의 ViewModel 과 MVP 의 Presenter 는 mediator 로 같은 역할을 하지만, MVP 패턴은 View 와 Presetner 가 1:1로 매칭이 되어야 하기 때문에 강하게 결합되어야 한다.
즉 두 차이점은 View 와의 관계에서 ViewModel 은 단방향, Presenter 는 양방향 처리를 한다는 점이다.
Presenter 는 View 에게 뷰 변경 요청을 보내지만, ViewModel 은 View 에게 어떠한 요청도 보내지 않는다.
단지, View 가 ViewModel 의 데이터를 관찰하다가 변경되면 변경을 적용할 뿐이다.
정리하면, 결합도 차이가 있다.
3. MVVM 과 MVP 각각 View 는 무엇을 의미하나?
MVP
- 사용자의 Action 을 받는다.
- 데이터를 Presenter 에 요청한다.
- Presenter 로부터 데이터를 응답 받고 UI를 갱신한다.
MVVM
- 사용자의 Action 을 받는다.
- 들어온 Action 을 커맨드 패턴을 통해 ViewModel 에 Action 을 전달한다.
- View 는 Data Binding 을 이용해 UI를 갱신한다.
4. Activity 라이프 사이클은?
launched > onCreate() > onStart() > onResume() > running > onPause() > onStrop() > onDestroy() > shut down
다른(B) Activity 가 포그라운드로 오게될 때 -> 다시 사용자가 본래(A) Activity 로 돌아올 경우
onPause() > onResume() > running
다른(B) Activity 가 포그라운드로 오게될 때 -> 오랫동안 본래(A) Activity 가 보지이 않을 경우 -> 다시 사용자가 본래(A) Activity 로 돌아올 경우
onPause() > onStop() > onRestart() > onStart() > onResume() > running
다른(B) Activity 가 포그라운드로 오게될 때 -> 오랫동안 본래(A) Activity 가 보지이 않을 경우 -> 높은 우선순위를 갖은 앱을 위해 메모리를 해제 시
onPause() > onStop() > onCreate() > onStart() > onResume() > onResume() > running
💡포그라운드란? 사용자에게 눈에 띄는 작업을 수행한다. 즉, 사용자에 눈에 띄는 작업을 수행하는 것을 말한다.
5. Fragment 라이프 사이클은?
added > onAttach() > onCreate() > onCreateView() > onViewStateRestored > onStart() > onResume() > active > onPause > onStop() > onSaveInstanceState() > onDestroyView() > onDestroy() > onDetach() > destroyed
💡 2020년 3월 18일 업데이트 이후 Fragment Lifecycle
case 1 : User navigates backward or fragment is removed/replaced
case 2 : The fragment is added to the backstack, the removed/replaced
두 경우 onPause() 상태로 들어간다.
The fragment returns to the layout from the back stack
onDestroyView() > onCreateView() > onViewStateRestored > onStart() > onResume() > active
6. MVP 패턴을 설명하시오.
MVP 패턴은 Model + View + Presenter를 합친 용어이다. Model과 View는 MVC 패턴과 동일하고, Controller 대신 Presenter가 존재한다.
Presenter는 View와 Model의 인스턴스를 가지고 있어 둘을 연결하는 역할을 한다. Presenter와 View는 1:1 관계이다.
장점
MVP 패턴의 장점은 View와 Model의 의존성이 없다는 것이다. MVP 패턴은 MVC 패턴의 단점이었던 View와 Model의 의존성을 해결하였다. (Presenter를 통해서만 데이터를 전달 받기 때문이다.)
단점
MVC 패턴의 단점인 View와 Model 사이의 의존성은 해결되었지만, View와 Presenter 사이의 의존성이 높아지는 단점이 있다. 어플리케이션이 복잡해질수록 View와 Presenter 사이의 의존성이 강해진다.
'Android Q&A > Android One a day' 카테고리의 다른 글
[안드로이드 면접] - 11 : (0) | 2023.02.03 |
---|---|
[안드로이드 면접] - 10 : (0) | 2023.02.02 |
[안드로이드 면접] - 8 : (0) | 2023.01.31 |
[안드로이드 면접] - 7 : (0) | 2023.01.30 |
[안드로이드 면접] - 6 : (0) | 2023.01.29 |