Kwaang Tech

ViewModel에서 View의 특정타입(Button,ListView 등)을 직접적으로 참조를 하지 않는 이유 본문

Dev/Study

ViewModel에서 View의 특정타입(Button,ListView 등)을 직접적으로 참조를 하지 않는 이유

콰앙 2023. 9. 19. 19:07

1.분리된 관심사 (Separation of Concerns)

'ViewModel' 은 뷰의 로직과 데이터를 처리하는 역할을 한다. 이를 통해 뷰와 비즈니스 로직을 분리할 수 있어 코드의 가독성이 향상되고, 재사용성과 테스트 용이성이 높아진다.

 

2. 재사용성

'ViewModel' 뷰와 분리되어 있기 때문에 여러 뷰에서 동일한 ViewModel을 재사용할 수 있다. 뷰의 구체적인 구현에 의존하지 않기 때문에 여러 UI 컴포넌트에서 동일한 로직과 데이터를 쉽게 사용할 수 있다.

 

3. 테스트 용이성

'ViewModel' 이 뷰의 구체적인 구현에 의존하지 않기 때문에 단위 테스트를 수행하기가 훨씬 쉽다. 뷰와의 상호작용 없이 'ViewModel' 의 로직과 데이터 처리를 테스트할 수 있다.

 

4. 라이프 사이클의 독립성

Android에서 'ViewModel'  액티비티나 프래그먼트의 라이프 사이클과 독립적이다. 즉, 화면 회전이나 재구성과 같은 이벤트에서 데이터가 유실되지 않아 뷰의 구체적인 요소에 의존하게 되면 라이프 사이클 이슈를 처리하기가 복잡해질 수 있다.

 

5. 데이터 바인딩

Android의 데이터 바인딩 라이브러리를 사용하면  'ViewModel'의 데이터를 뷰에 직접 연결할 수 있다. 이를 통해 뷰와  'ViewModel' 사이의 결합을 최소화하면서 UI 업데이트를 자동화 할 수 있다.

 

즉,  'ViewModel' 이 뷰의 구체적인 요소를 참조하지 않게 설계함으로써 뷰와 로직을 분리하고, 코드의 재사용성과 테스트의 용이성을 향상 시킬수 있다. 

 

https://github.com/KyungHwa0/search_media

 

GitHub - KyungHwa0/search_media: 🔎카카오 RESTAPI 를 이용한 이미지,동영상 검색하기🔍

🔎카카오 RESTAPI 를 이용한 이미지,동영상 검색하기🔍. Contribute to KyungHwa0/search_media development by creating an account on GitHub.

github.com

카카오REST API를 이용해서 미디어 검색하는 것을 실습 했는데, SeachFragment 쪽에서만 ViewModel를 만들어서 FavoriteFragment쪽 처리하는게 어려웠다.

DataBinding을 모든곳에서 끌어다 써서 이걸 처리 시켜 주는 작업이 매우 까다로웠다.

MVVM 패턴도, DataBinding 자체도 이해를 완벽하게 하지 못하고, '이건 이렇게 쓰느게 좋은거야!' 썻다가 사실 내코드가 내코드가 아닌 실습이 되었다.
아직 완벽하게 이해하진 못햇지만, 작게라도 이번 실습을 통해서 어느정도 이해는 할 수 있었지만, 다음번엔 DataBind을 뺀 채로 MVVM을 ViewModel를 다 만들어가면서 쉐어하는 형식으로 도전 해 보려고 한다.

 

 

 

 

 

반응형