📕배운 내용
안드로이드 애플리케이션 설계 패턴은 크게 3가지로 분류됩니다. ( MVC, MVP , MVVM)
이번 포스팅에서는 MVC에 대해서 알아볼 예정입니다.
애플리케이션 설계 패턴이 중요한 이유는 이전 글인 Clean - Architecture와 연관되어 있습니다.
간략하게 설명하면 앱의 지속적인 업데이트와, 안드로이드 정책의 계속적인 변화, 시장의 요구의 변화 등으로 인한
유지보수의 비용을 줄이기 위해서입니다. 여기서 잘 설계된 애플리케이션은 유지보수의 비용을 줄여주고, 안전성, 성능에 도움을 주기에 설계패턴을 완벽히 숙지하는 것이 중요하다고 생각합니다.
📕MVC란?
Model , View , Controller의 구성요소로 관심사를 분리한 설계 패턴입니다.
안드로이드 앱 개발 초기에 많이 적용되었으며, 대다수의 초보 안드로이드 개발자들이 선택하는 설계 패턴입니다.
📗3가지 구성요소
💡Model : Application의 두뇌라고 이해하면 편합니다.
- 어플리케이션의 비즈니스 로직, 사용되는 데이터를 다룹니다.
- 표현형식에 의존적이지 않고 ,사용자에게 보이지 않아 어떻게 보일지 신경 쓸 필요가 없습니다.
- 비즈니스 데이터 = DBMS에 의해서 관리
- 몇몇 함수를 통해서 데이터를 제공, 입력 , 수 정
- 안드로이드에서 데이터베이스의 Entity를 담당하는 POJO 클래스를 포함한, SQLite, Room, Realm 등이 그 예입니다.
- View나 Controller에 묶여 있지 않아 재사용이 가능합니다.
💡View
- 사용자에게 직접적으로 보여지는 영역입니다.
- 모델로부터 얻은 데이터를 뷰에서 나타냅니다.
- 안드로이드에서 Activity, Fragment가 그 예시입니다.
💡Controller
- 모델과 뷰에 의존
- 뷰로부터 입력받거나, 특정 이벤트 발생 시 모델 또는 뷰를 변경
- 새로운 데이터가 입력되는 모델로 전달하여 데이터베이스에 저장하고 그 동시에 모델의 상태 변화를 감지하여 등록된 뷰에 상태를 업데이트해서 보여줄 수 있는 것
- MVC에서는 Activity와 Fragment는 뷰의 역할도 하고 컨트롤러의 역할도 한다.
쉽게 말하면 Model과 View의 중간에서 데이터 변경, 상호작용을 관리하여 View나 Model을 업데이트 시켜줍니다.
📗설계 구조
이러한 설계 구조 만으로는 이해하기 쉽지 않을 것 같으셔서 흐름을 그려보았습니다.
- Controller가 사용자 입력을 받음.
- Controller는 입력을 확인하고 View에 데이터 업데이트 여부를 확인한다.
- 데이터 업데이트가 필요한 경우 데이터를 요청하며 데이터를 갱신하고 필요에 따라 View에 UI 갱신요구를 해서 View가 UI를 갱신합니다.
- 데이터 업데이트가 필요하지 않은ㅁ 경우 UI만 갱신하며 필요에 따라 데이터도 갱신합니다.
📗MVC의 장점
- 모델에서 데이터를 얻어서 뷰에 표현하고, 이 모든 것을 컨트롤러가 중재하기 때문에 구조가 단순하고 직관적
- Model의 비종속성으로 재사용이 가능하다. (Model과 View를 분리하기 때문)
- 규모가 작은 앱 개발 시 개발기간이 짧고, 모든 코드가 액티비티나 프래그먼트에 작성되는 경향이 있어서 코드를 파악하기가 쉽다. (1번과 연결되는 점)
📗MVC의 단점
- 컨트롤러가 뷰와 모델에 의존하고, 뷰는 모델에 의존
- 결합도가 높다 -> 유닛 테스트가 쉽지 않다.
- View의 UI갱신을 위해 Model을 참조하므로 앱 자체의 규모가 커진다.
- Controller에 코드가 집중될수록 성능이 저하되고 유지보수 하기 어렵다. -> 스파게티 코드로 전락할 가능성이 높다.
✔느낀 점?
- 우선 안드로이드 채용공고에서 자주 보던 MVC, MVP와 같은 개념을 알게 되었다.
- 무엇이든지 설계가 가장 중요하다고 느꼈고, 알맞은 설계패턴을 사용해서 앱을 설계하는 것에 대한 중요성을 느꼈다.
- 항상 유지보수를 신경 써라!
'Skils > Android' 카테고리의 다른 글
[Android] - ViewModel (0) | 2023.02.09 |
---|---|
[Android] - 안드로이드 설계 패턴(MVP) (0) | 2023.02.05 |
[Android] - Clean Architecture (0) | 2023.01.30 |
[Android] - 안드로이드 활동 생명주기(Activity LifeCycle) (0) | 2022.12.22 |
[프로젝트] - 모앱1 프젝을 마치며... (2) | 2022.12.16 |