Skils/Android

[Android] - 안드로이드 설계 패턴 (MVC)

재한 2023. 2. 4. 16:26

📕배운 내용

안드로이드 애플리케이션 설계 패턴은 크게 3가지로 분류됩니다. ( MVC, MVP , MVVM)

이번 포스팅에서는 MVC에 대해서 알아볼 예정입니다.


애플리케이션 설계 패턴이 중요한 이유는 이전 글인 Clean - Architecture와 연관되어 있습니다.

간략하게 설명하면 앱의 지속적인 업데이트와, 안드로이드 정책의 계속적인 변화, 시장의 요구의 변화 등으로 인한 

유지보수의 비용을 줄이기 위해서입니다. 여기서 잘 설계된 애플리케이션은 유지보수의 비용을 줄여주고, 안전성, 성능에 도움을 주기에 설계패턴을 완벽히 숙지하는 것이 중요하다고 생각합니다.

 

📕MVC란?

Model , View , Controller의 구성요소로 관심사를 분리한 설계 패턴입니다.

안드로이드 앱 개발 초기에 많이 적용되었으며, 대다수의 초보 안드로이드 개발자들이 선택하는 설계 패턴입니다.

 

📗3가지 구성요소

 

💡Model  : Application의 두뇌라고 이해하면 편합니다.

  1. 어플리케이션의 비즈니스 로직, 사용되는 데이터를 다룹니다.
  2. 표현형식에 의존적이지 않고 ,사용자에게 보이지 않아 어떻게 보일지 신경 쓸 필요가 없습니다.
  3. 비즈니스 데이터 = DBMS에 의해서 관리
  4. 몇몇 함수를 통해서 데이터를 제공, 입력 , 수 정
  5. 안드로이드에서 데이터베이스의 Entity를 담당하는 POJO 클래스를 포함한, SQLite, Room, Realm 등이 그 예입니다.
  6. View나 Controller에 묶여 있지 않아 재사용이 가능합니다.

💡View

  1. 사용자에게 직접적으로 보여지는 영역입니다.
  2. 모델로부터 얻은 데이터를 뷰에서 나타냅니다.
  3. 안드로이드에서 Activity, Fragment가 그 예시입니다.

💡Controller

  1. 모델과 뷰에 의존
  2. 뷰로부터 입력받거나, 특정 이벤트 발생 시 모델 또는 뷰를 변경
  3. 새로운 데이터가 입력되는 모델로 전달하여 데이터베이스에 저장하고 그 동시에 모델의 상태 변화를 감지하여 등록된 뷰에  상태를 업데이트해서 보여줄 수 있는 것
  4. MVC에서는 Activity와 Fragment는 뷰의 역할도 하고 컨트롤러의 역할도 한다.

쉽게 말하면 Model과 View의 중간에서 데이터 변경, 상호작용을 관리하여 View나 Model을 업데이트 시켜줍니다.

 

 

📗설계 구조

 

이러한 설계 구조 만으로는 이해하기 쉽지 않을 것 같으셔서 흐름을 그려보았습니다.

  1. Controller가 사용자 입력을 받음.
  2. Controller는 입력을 확인하고 View에 데이터 업데이트 여부를 확인한다.
  3. 데이터 업데이트가 필요한 경우 데이터를 요청하며 데이터를 갱신하고 필요에 따라 View에 UI 갱신요구를 해서 View가 UI를 갱신합니다.
  4. 데이터 업데이트가 필요하지 않은ㅁ 경우 UI만 갱신하며 필요에 따라 데이터도 갱신합니다.

 

📗MVC의 장점 

  1. 모델에서 데이터를 얻어서 뷰에 표현하고, 이 모든 것을 컨트롤러가 중재하기 때문에 구조가 단순하고 직관적
  2. Model의 비종속성으로 재사용이 가능하다. (Model과 View를 분리하기 때문)
  3. 규모가 작은 앱 개발 시 개발기간이 짧고, 모든 코드가 액티비티나 프래그먼트에 작성되는 경향이 있어서 코드를 파악하기가 쉽다. (1번과 연결되는 점)

 

📗MVC의 단점

  1. 컨트롤러가 뷰와 모델에 의존하고, 뷰는 모델에 의존
    1. 결합도가 높다 -> 유닛 테스트가 쉽지 않다.
  2. View의 UI갱신을 위해 Model을 참조하므로 앱 자체의 규모가 커진다.
  3. Controller에 코드가 집중될수록 성능이 저하되고 유지보수 하기 어렵다. -> 스파게티 코드로 전락할 가능성이 높다.

 

 

✔느낀 점?

  1. 우선 안드로이드 채용공고에서 자주 보던 MVC, MVP와 같은 개념을 알게 되었다.
  2. 무엇이든지 설계가 가장 중요하다고 느꼈고, 알맞은 설계패턴을 사용해서 앱을 설계하는 것에 대한 중요성을 느꼈다.
  3. 항상 유지보수를 신경 써라!