ViewModel (3) 썸네일형 리스트형 Logic 분리하기 # Logic 분리하기 우선 Add와 Edit기능을 하는 AddEditTaskFragment에서 작동하는 로직을 분석해보자. 간단하게 표현하면 사용자에게 Task 정보를 입력받는다. 입력 받은 정보를 Task 오브젝트로 만든다. 생성된 오브젝트를 DB에 추가한다. 3단계로 표현할 수 있다. 여기서 Edit인 경우는 기존 Task를 불러오는 선행작업이 추가된다. # 각 Logic을 처리해야하는 곳을 생각해보자. 1번은 사용자가 View에 입력값을 입력하는 상황이다. View를 다루는 Fragment가 이 로직을 처리하기 적합한 위치일 것이다. 2번은 View에 입력된 값을 취합하여 Task 오브젝트로 만드는 일이다. View의 값을 읽기 위해서는 EditText 등 입력에 관여하는 View를 사용해야하므로.. Fragment에 리스트 출력하기 Part.2 앞에서 인터페이스를 사용해서 이미 생성된 Fragment에게 데이터를 전달하는 방법을 구현해보았다. 하지만 그것보다 간단하게 같은 기능을 수행하도록 할 수 있다. 우리에게는 이미 Activity와 Fragment가 공유하고 있는 ViewModel 영역이 있다. ViewModel은 Activity보다 긴 생명주기를 가지고 View 간에 데이터를 공유하기 위한 목적을 가지고 있다. ViewModel에 Filter라는 라이브데이터를 추가하고 Activity에서 메뉴를 선택 시에 LiveData에 값을 포스트하고 TaskListFragment는 Filter를 관찰하고 있다가 변화를 감지했을 때 리스트를 바꾸어 업데이트하면 된다. 새로운 인터페이스 정의도 필요없고, 복잡한 형변환도 필요없다. 이미 구현된 뷰모델이.. ViewModel Testing 코드 작성하기 1. ViewModel의 역할 ViewModel은 MVVM 패턴에서 Data Source와 View를 연결하는 컴포넌트이다. ViewModel의 첫번째 목적은 Data를 꺼내서 보관하고 필요한 때에 UI에게 제공하는 기능을 담당한다. View 자체에서 데이터를 보관하면 화면회전과 같은 Configuration Change 상황에서 데이터를 관리하는데 어려움이 발생한다. 하지만 ViewModel은 Activity보다 생명주기가 더 길기 때문에 ViewModel이 홀드하고 있는 데이터는 Activty가 새롭게 그려져도 다시 사용할 수 있게 된다. 기존의 다른 패턴들과 달리 ViewModel은 View에 대한 레퍼런스를 가지고 있지 않다는 것이 또 다른 큰 특징이다. MVP 패턴에서는 View - Presen.. 이전 1 다음