안드로이드 기술 면접 질문을 준비하면서 MVC, MVP, MVVM 패턴에 대해 준비하면서 아직 명확하게 개념에 대해서 정리가 되지 않는거 같아서 다시 한번 공부를 해볼 겸 기록해두려고한다.

Android에서 많이 사용되는 패턴 중 하나로 Model - View - Controller로 애플리케이션을 구성한다.
Data를 조작(가공)하는 역할DB 또는 네트워크 작업을 관리한다.Model에 상태에 따라서 업데이트 된다.Model과 View를 업데이트한다.Model과 View 사이의 중개자 역할Controller를 통해서 들어온다.Controller는 사용자의 요청에 따라 Model을 업데이트한다.Controller는 Model을 나타내줄 View를 선택한다.View는 Model을 이용해 화면에 데이터를 표시한다.data class User(var id: Int, var name: String)
사용자 정보를 저장하는 데이터 클래스 생성
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center">
<TextView
android:id="@+id/usernameTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Username"
android:textSize="18sp"
android:textStyle="bold"
android:padding="8dp"/>
<Button
android:id="@+id/updateButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Update User Data"
android:layout_marginTop="16dp"/>
</LinearLayout>
UI를 나타내는 XML 파일 생성
class MainActivity : AppCompatActivity() {
private lateinit var model: UserModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 모델 초기화
model = UserModel()
findViewById<Button>(R.id.updateButton).setOnClickListener {
// 데이터 설정
setUserData(1, "KingZZang")
// 뷰 업데이트
updateView()
}
}
private fun setUserData(userId: Int, userName: String) {
model.id = userId
model.name = userName
}
private fun updateView() {
findViewById<TextView>(R.id.usernameTextView).text = model.username
}
}
Controller의 역할을 Activity 또는 Fragment 담당
일반적으로 안드로이드에서는 View와 Control에 대한부분이 Activity 또는 Fragment가 가지고 있기 때문에 두가지 역할을 동시에 수행한다고 봐도 됨
Model 과 View가 분리된다.Model과 View사이의 의존성이 발생한다. -> 앱이 커지고 로직이 복잡해질수록 유지보수의 어려움이 증가Controller에 많은 코드가 작성되어서 비대해지는 문제가 발생한다.오늘은 MVC패턴에 대해서 간단하게 정리를 해보았다. 안드로이드의 특성상 View와 Controller를 분리해서 생각하기 조금 애매하다는 생각이 들긴하는데.. 일단 Acitivity 또는 Fragment가 View + Controller라고 생각하면 될거같다..
후딱 MVP랑 MVVM에 대해서도 정리해야겠다.