Architecture와 LiveData

핑구·2022년 10월 9일
0

JETPACK 공부 이유

Clean Architecture를 통한 효율적 앱 개발

Clean Architecture란?

앱 개발을 할 때 배우지 않으면 모르는 것이 하나의 Activity, Fragment에 모든 기능을 다 때려넣는 것이다.
이렇게 하면 안정성이 떨어지고 여러 문제들이 발생할 수 있다.

그래서 중요한 것이 "관심사 분리"
Activity와 Fragment와 같은 UI 기반 클래스는 UI 관련 일들만 처리하고 데이터 처리는 데이터 처리만 하는 것!
이렇게 클래스를 최대한 가볍게 유지하여 구성요소 수명 주기와 관련된 많은 문제를 피할 수 있다.

구글에서 제시한 일반적인 앱 아키텍처 다이어그램이다.


구글에서 권장하는 아키텍처 예시이다.

위의 예시들과 같이 각 레이어는 양방향이 아닌 종속 관계를 맺는다.
즉, ViewModel에서 Activity를 호출할 수 없다.
ex) MVVM : Model, View, ViewModel

Repository

아키텍처 관해 보다가 repository가 뭔지 궁금하여 찾아봤다.

데이터 출처(로컬 DB인지 API응답인지 등)와 관계 없이 동일 인터페이스로 데이터에 접속할 수 있도록 만드는 것을 Repository 패턴이라고 한다. 레포지토리는 데이터 소스에 액세스하는 데 필요한 논리를 캡슐화하는 클래스 또는 구성 요소이다.
출처: https://hs5555.tistory.com/112

Repository에서 캡슐화를 하면서 그 위에 있는 레이어인 도메인과 UI에서는 데이터 소스에 대한 직접적인 접근이 불가능해진다.
그러면서 모듈화가 명확해지고 유지보수성과 단위테스트 검증이 쉬워진다.

ViewModel

ViewModel은 화면회전과 같은 화면구성 변경 시(View가 Destroy되었다가 Create될 때) 데이터를 그대로 유지시켜준다.
이러한 ViewModel과 항상 함께 다니는 친구가 LiveData

LiveData

데이터가 변경되었을 때 UI 컨트롤러(Activity/Fragment)에게 알려주는 역할을 하는 것이 Observer라고 한다.
Observer를 이용하여 데이터 변경 시 바로 UI 업데이트가 가능하게 할 수 있다.
이러한 Observer가 지켜볼 수 있는 데이터가 바로 LiveData이다.
LiveData는 생명주기를 인식하여 활동 수명 주기 상태에 있는 앱 구성요소 관찰자만 업데이트 하기 때문에 수명주기로 인한 메모리 문제가 없다.

이 외에도 여러 장점들이 존재한다. 공식문서

Observer의 생명주기는 지정된 UI 컨트롤러의 생명주기와 동일한데
Activity의 경우에는 this로 지정 가능하지만
Fragment의 경우에는 this 대신 viewLifecycleOwner를 사용해야한다.
공식문서


참고
https://www.blueswt.com/126
https://todaycode.tistory.com/49
https://devvkkid.tistory.com/196

profile
발전중

0개의 댓글