안드로이드을 공부함에 있어 지금껏 디자인 패턴에 대해 공부한 적이 없는 것 같아 학습을 하기로 했다.
3가지 패턴에 대해 학습한 내용을 서술할 예정이고,
특히 안드로이드에서 사용하는 MVVM에 대해 구체적으로 다뤄볼것이다.
구성요소
(View, Model, Controller)
Model - 어플리케이션 내에서 데이터, 데이터 처리를 담당
View - 데이터를 보여주는 UI
Controller - Model과 View 사이의 상호작용을 관리
특징
- 사용자의 입력을 컨트롤러를 통해 모델에 업데이트하고, 모델의 변경은 뷰에 반영
장점
- 단순한 패턴이라 구현 용이
단점
- View와 Model 사이의 의존성이 높음
구성요소
(View, Model, Presenter)
Model - 어플리케이션 내에서 데이터, 데이터 처리를 담당
View - 데이터를 보여주는 UI
Presenter - View에서 요청한 정보로 Model 가공후 View로 전달, View와 Model 사이에서 중개자 역할을 수행
특징
- Model 과 View가 분리 되어있으며, Presenter을 통해 상태나 변화를 알려줌
장점
- Model과 View에 의존성을 해결
단점
- View와 Presenter의 의존성 문제
구성요소
(View, Model, View Model)
- IOS는 View(View + View Model)
- View Binding을 통하여 View와 연결
- View Model은 View와 Data Binding
특징
- MVC 패턴에서 Controller를 빼고 ViewModel을 추가한 패턴
장점
- View와 Model이 서로 전혀 알지 못하기에 독립성을 유지
- 독립성을 유지하기 때문에 효율적인 유닛테스트가 가능
단점
- ViewModel을 설계하는 어려움
- 데이터 바인딩이 필수적으로 요구
- 데이터와 연결된 UI 요소를 자동으로 동기화하는 것
사용 방법
- app/build.gradle 에 dataBinding 요소를 추가
android {
...
dataBinding{
enabled = true
}
}
* data binding을 사용하는 xml 리소스는 <layout> 루트 태그로 시작
* binding class는 레이아웃 파일 이름을 따라 자동 생성 ex) MainActivityBinding
- Activity 에서 기존의 setContentView() 함수를 DataBindingUtil.setContentView() 로 교체
- view 에 보여줄 이름 data class 를 선언
- xml에 있는 <layout> 태그 안에 <data> 요소를 작성
<data>
<import type="android.view.View"/>
<variable
name="'data class name'"
type="'packgeName'.databinding.'name'"
</data>
- Activity 에서 Data 객체를 초기화
...private lateinit var binding: ActivityMainBinding
binding = DataBindingUtil.setContentview(
this,
R.layout.'layout name'
)
val data = Data(...)
binding.data = data
안드로이드 문서 저장 방식에 대한 기록 (0) | 2023.07.13 |
---|---|
data binding 실습 (단 방향, 양 방향 통신) (0) | 2023.07.04 |
안드로이드 Manifest에 대해 (0) | 2023.04.02 |
안드로이드에서 GPS 사용 하는 방법 (0) | 2023.03.26 |
안드로이드 앱, 액티비티, 프래그먼트 생명주기 공부 (0) | 2023.03.18 |
댓글 영역