[Android] 아키텍처 패턴 - MVC패턴

김정현·2024년 4월 19일

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

MVC 패턴

Android에서 많이 사용되는 패턴 중 하나로 Model - View - Controller로 애플리케이션을 구성한다.

Model

  • 애플리케이션의 데이터와 비즈니스 로직을 관리한다.
  • Data조작(가공)하는 역할
  • DB 또는 네트워크 작업을 관리한다.

View

  • 사용자에게 데이터를 시각적으로 표시한다.
  • Model에 상태에 따라서 업데이트 된다.

Controller

  • 사용자의 입력을 받고 이에 따라서 ModelView를 업데이트한다.
  • ModelView 사이의 중개자 역할

MVC 패턴 흐름

  • 사용자의 입력(버튼클릭, 텍스트 입력 등)이 Controller를 통해서 들어온다.
  • Controller는 사용자의 요청에 따라 Model을 업데이트한다.
  • ControllerModel을 나타내줄 View를 선택한다.
  • ViewModel을 이용해 화면에 데이터를 표시한다.

Android MVC 패턴 예제코드

Model

data class User(var id: Int, var name: String)

사용자 정보를 저장하는 데이터 클래스 생성

View

<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 파일 생성

Controller

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 담당
일반적으로 안드로이드에서는 ViewControl에 대한부분이 Activity 또는 Fragment가 가지고 있기 때문에 두가지 역할을 동시에 수행한다고 봐도 됨

MVC 장점 & 단점

장점

  • ModelView가 분리된다.
  • 구현하기 가장 쉽고 간단하다.

단점

  • ModelView사이의 의존성이 발생한다. -> 앱이 커지고 로직이 복잡해질수록 유지보수의 어려움이 증가
  • Controller에 많은 코드가 작성되어서 비대해지는 문제가 발생한다.

마치며

오늘은 MVC패턴에 대해서 간단하게 정리를 해보았다. 안드로이드의 특성상 ViewController를 분리해서 생각하기 조금 애매하다는 생각이 들긴하는데.. 일단 Acitivity 또는 FragmentView + Controller라고 생각하면 될거같다..
후딱 MVP랑 MVVM에 대해서도 정리해야겠다.

profile
안녕하세요 반갑습니다

0개의 댓글