저번 3단계에서 'End Game' 버튼에 대한 리스너를 구현했는데, 이렇게 사용자가 게임을 종료하면 ScoreFragment에서는 점수를 보여주지 않는다. 우리는 ViewModel이 ScoreFragment에서 보여질 점수를 갖고 있기를 바란다. 그래서 우리는 ViewModel의 초기화동안 factory 패턴을 사용해 점수 값을 넘겨줄 것이다. factory 패턴이 익숙하지 않을 수 있다. 지금 나에게 떠오르는 예시는 BitmapFactory 정도인데, factory 패턴은 이름 그대로 직관적인 패턴이다. 공장에서 제품을 틀로 찍어내듯 생산하는데 factory 패턴도 같은 클래스의 인스턴스를 찍어내듯 생산하게끔 만든 패턴이다. 이 때, 인스턴스를 리턴해주기 위해 메소드를 사용한다. 1. score 패키..
이번 과제는 'End Game' 버튼에 클릭 리스너를 구현하는 것이다. 1. GameFragment에서 onEndGame() 메소드를 추가한다. private fun onEndGame() { } 이 메소드는 사용자가 'End Game' 버튼을 탭할 때 호출될 것이다. 2. GameFragment에서 onCreateView() 메소드 안에 'Got It'과 'Skip' 버튼의 리스너를 설정하는 코드를 위치시킨다. 위 두줄의 코드 바로 아래에 'End Game' 버튼을 위한 클릭 리스너를 binding 변수를 사용해 설정한다. binding.endGameButton.setOnClickListener { onEndGame() } 3. GameFragment에서 앱의 점수 화면으로 넘어가기 위해 gameFini..
이전 글에서 ViewModel이 기기의 설정(configuration) 변경에도 살아있는 것을 확인했다. 그리고, 이번에는 화면에 보여줄 데이터를 넣고, 그 데이터를 작업하는 코드를 ViewModel 안에 구현한다. ViewModel은 프래그먼트, 액티비티, 또는 뷰들의 참조를 절대 포함해서는 안된다. 이 친구들은 기기의 configuration이 변경되면 살아남지 못하기 때문이다. 우리가 ViewModel을 추가하기 전에는 화면 회전 등의 기기의 설정 변경이 있으면 프래그먼트는 부셔졌다 다시 만들어졌고, 데이터는 소실되었다. 하지만 ViewModel을 추가하고 프래그먼트의 데이터를 ViewModel로 이동한 뒤에는 프래그먼트에서 보여줄 모든 데이터는 이제 ViewModel 안에 있고, 앱이 기기의 설정..
이번 코드랩에서는 AAC의 ViewModel 클래스를 알아볼 것이다. 1페이지를 천천히 보다보니 ViewModel은 factory 디자인 패턴을 사용하고 있다는 것을 알 수 있다. ViewModel을 instantiate(인스턴스화)하려면 ViewModelFactory를 사용하라고 한다. 다음 페이지부터는 주어지는 샘플 앱이 있고, 여기서 문제를 정의한 후 문제 해결을 위해 어떤 단계를 밟아서 처리할 것인지 안내하고 있다. 1. GameViewModel 클래스(ViewModel을 상속하는) 추가하기 먼저 ViewModel을 사용하기 위해서는 모듈 수준의 build.gradle에서 Gradle dependency를 추가해주어야 한다. //ViewModel implementation 'androidx.lif..