MVVM

Android

Codelab으로 DataBinding 알아보기 - 1. 과정 소개

나는 Codelab으로 알아보기 시리즈를 작성하면서 지금까지 GuessTheWord 앱을 수정해왔다. ViewModel을 추가했고, LiveData도 추가했다. 하지만, 앱은 이미 DataBinding을 사용하고 있었는데 이에 대해 소개하지 않았다. 나도 해당 과정을 막연히 따라가다보니 의문점으로만 남겨두었는데 이제서야 소개하게 되었다. 일단 이번 과정에서 다룰 내용은 다음과 같다. DataBinding 라이브러리 요소 사용법을 공부한다. ViewModel, LiveData와 통합하는 법을 공부한다. Fragment에서 클릭 리스너를 대체하기 위해 리스너를 바인딩하는 방법을 공부한다. 데이터바인딩 표현식에 문자열 형식을 추가하는 방법을 공부한다. 빠르게 다음 글로 찾아오도록 노력해보겠다.

Android

Codelab으로 LiveData 알아보기 - 8. 정리(完)

LiveData LiveData는 생명 주기를 인식하는 관찰 가능한 데이터 홀더 클래스이다. 데이터가 업데이트될 때 UI가 자동으로 업데이트되도록 LiveData를 사용할 수 있다. LiveData는 데이터를 감싸서 가지고 있다. LiveData는 생명 주기를 인식하는데 이는 started, resumed 같이 활성 상태에 있는 옵저버만 업데이트를 한다. LiveData를 추가하기 위해 ViewModel에 있는 데이터 변수를 LiveData 혹은 MutableLiveData로 변경한다. MutableLiveData는 값이 변경 가능한 LiveData 객체이다. MutableLiveData는 제네릭 클래스이기에 어떤 데이터를 가지고 있는지 명시해주어야 한다. LiveData가 가지고 있는 데이터 값을 변경..

Android

Codelab으로 LiveData 알아보기 - 7. Add the Play Again Button

이번에는 점수 화면에 Play Again 버튼을 추가하고 LiveData를 사용하여 클릭 리스너를 구현할 것이다. 해당 버튼은 점수 화면에서 다시 게임 화면으로 이동하는 이벤트를 발생시킨다. 먼저, 우리가 받아놓은 코드에는 이미 Play Again 버튼이 있지만 숨겨져 있다. 1. score_fragment.xml에서 play_again_button의 visibility를 보이도록 처리한다. 2. ScoreViewModel에 _eventPlayAgain이라는 Boolean값을 가지는 LiveData객체를 추가한다. 이 객체는 점수 화면에서 게임 화면으로 이동하는 이벤트를 저장하기 위해 만들었다. private val _eventPlayAgain = MutableLiveData() val eventPlay..

Android

Codelab으로 LiveData 알아보기 - 6. Add LiveData to the ScoreViewModel

이번에는 score를 ScoreViewModel의 LiveData 객체로 변경하고 옵저버를 붙일 것이다. 이번 작업은 4번의 LiveData를 GameViewModel에 추가한 작업과 비슷할 것이다. 앱의 모든 데이터가 LiveData를 사용하도록 하기 위해 ScoreViewModel에 이러한 변경점을 적용한다. 1. ScoreViewModel의 score 변수를 MutableLiveData로 변경한다. _score 변수를 네이밍 컨벤션을 지켜 이름을 변경하고 backing property를 추가한다. private val _score = MutableLiveData() val score: LiveData get() = _score 2. GameViewModel의 초기화 블럭 안에서 _score를 초기화..

Android

Codelab으로 LiveData 알아보기 - 5. Add a game-finished event(2)

저번 글에서 문제는 토스트 메시지가 프래그먼트가 기기 회전 등의 이유로 재생성될 때마다 다시 보이는 것이었다. 바로 본론으로 들어가보자. Reset the game-finished event 보통, LiveData는 데이터 변경이 있을 때만 업데이트를 옵저버에게 전달한다. 이 행동의 예외 사항은 옵저버가 비활성 상태에서 활성 상태로 변경될 때도 업데이트를 수신한다는 것이다. 이것이 게임 종료에 대한 토스트가 반복적으로 발생하는 이유이다. 화면 회전 이후 GameFragment가 재생성되면 비활성에서 활성 상태로 변경되고, 옵저버는 기존 ViewModel에 다시 연결된다. 그리고, 데이터를 수신한다. 그럼 gameFinished 메소드가 다시 호출되고, 토스트가 표시된다. GameViewModel안의 ev..

Android

Codelab으로 LiveData 알아보기 - 4. Add a game-finished event(1)

현재 우리가 수정한 앱은 'End Game' 버튼을 누르면 점수 화면으로 넘어간다. 우리는 플레이어가 모든 단어를 거치고나면 점수 화면으로 이동하기를 원한다. 플레이어가 마지막 단어를 끝내면 게임이 자동으로 끝나서 버튼을 누를 필요가 없도록 만들고 싶다. 이 기능을 구현하기 위해 우리는 이벤트가 발생되어야 하고 ViewModel에서 모든 단어가 보여졌을 때 프래그먼트에 전달되어야 한다. 이를 위해서는 LiveData 옵저버 패턴을 적용해야 한다. Observer pattern은 observable(Subject)과 observer 사이의 통신을 정의한다. 이 앱의 LiveData의 경우, 위 그림의 Subject는 LiveData 객체이다. 그리고, Observer들은 프래그먼트와 같은 UI contro..

Android

Codelab으로 LiveData 알아보기 - 3. Encapsulate the LiveData

캡슐화는 객체의 필드에 직접 접근을 막는 방법이다. 우리가 객체를 캡슐화할 때 private인 내부 필드를 수정할 수 있도록 public 메소드들을 제공해야 한다. 캡슐화를 사용하면 다른 클래스가 이 내부 필드를 어떻게 조작할지 제어할 수 있다. 현재, 우리가 수정한 코드에서 viewModel.score.value를 사용하듯 모든 외부 클래스에서 score와 word 변수를 수정할 수 있다. 우리가 지금 만드는 이 앱에서는 문제가 없을 수 있지만, 출시용 앱에서는 ViewModel 객체의 데이터를 조작해야한다. 오직 ViewModel이 앱의 데이터를 수정해야한다. 하지만, UI controller가 데이터를 읽을 필요가 있고, 그래서 데이터 필드는 완벽한 private이 될 수 없다. 앱의 데이터를 캡슐..

Android

Codelab으로 LiveData 알아보기 - 2. Attach observers to the LiveData objects

저번 단계에서는 score와 word의 데이터를 LiveData 객체로 바꿔줬다. 이번 단계에서는 Observer 객체를 작업한 LiveData 객체에 붙일 것이다. 우리는 fragment의 뷰(viewLifecycleOwner)를 LifecycleOwner로써 사용할 것이다. 왜 viewLifecycleOwner를 사용할까? 프래그먼트의 뷰는 프래그먼트 자체가 부서지지 않더라도 사용자가 다른 곳으로 이동하면 부서진다. 이것은 필연적으로 프래그먼트의 lifecycle과 프래그먼트 뷰의 lifecycle 두 lifecycle을 만든다. 프래그먼트의 뷰 대신 프래그먼트의 lifecycle을 참조하면 뷰를 업데이트할 때 사소한 버그가 생길 수 있다. 그래서, 프래그먼트의 뷰에 영향을 미치는 observer를 ..

Android

Codelab으로 LiveData 알아보기 - 1. Add LiveData to the GameViewModel

첫 번째로 ViewModel에 LiveData를 적용해 볼 것이다. LiveData는 생명 주기를 인지하는 관찰 가능한 데이터 홀더 클래스이다. 예를 들어, 우리는 이 앱에서 현재 점수를 LiveData로 감쌀 수 있다. 이번 코드랩에서는 LiveData의 여러 특성을 배울 것이다. - LiveData는 관찰 가능하다. 이 뜻은 LiveData 객체가 가지고 있는 데이터가 변경될 때 observer에게 감지된다는 의미이다. - LiveData는 데이터를 가지고 있다. LiveData는 wrapper이고 모든 데이터와 같이 사용될 수 있다. - LiveData는 생명 주기를 인식한다. LiveData에 observer를 붙일 때, observer는 LifecycleOwner와 연계되어 있다. (Lifecy..

Android

Codelab으로 LiveData 알아보기 - 과정 소개

이번 코드랩에서는 ViewModel 클래스의 데이터와 LiveData를 어떻게 통합하는지 배우게 될 것이다. LiveData는 데이터베이스 변경이 있을 때 알려주는 데이터 객체를 빌드하도록 해주는 AAC 중 하나이다. LiveData 클래스를 사용하기 위해서는 앱의 데이터 변경을 관찰하는 observer를 설정해야 한다. LiveData는 lifecycle을 인식한다. 그래서 active lifecycle 상태에 있는 앱 구성 요소 observer만 업데이트한다. LiveData에 관한 코드랩을 시작하기 앞서 만약 ViewModel의 사용법을 모른다면 먼저 공부해야 한다. https://bonustrack02.tistory.com/entry/Codelab%EC%9C%BC%EB%A1%9C-ViewModel..

BonusTrack02.dev
'MVVM' 태그의 글 목록 (2 Page)