첫 번째로 ViewModel에 LiveData를 적용해 볼 것이다. LiveData는 생명 주기를 인지하는 관찰 가능한 데이터 홀더 클래스이다. 예를 들어, 우리는 이 앱에서 현재 점수를 LiveData로 감쌀 수 있다. 이번 코드랩에서는 LiveData의 여러 특성을 배울 것이다. - LiveData는 관찰 가능하다. 이 뜻은 LiveData 객체가 가지고 있는 데이터가 변경될 때 observer에게 감지된다는 의미이다. - LiveData는 데이터를 가지고 있다. LiveData는 wrapper이고 모든 데이터와 같이 사용될 수 있다. - LiveData는 생명 주기를 인식한다. LiveData에 observer를 붙일 때, observer는 LifecycleOwner와 연계되어 있다. (Lifecy..
이번 코드랩에서는 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..
저번 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..
안드로이드에서 사용하는 확장자로는 apk와 aab가 있다. 오늘은 apk에 대해 먼저 소개해보려 한다. apk라는 확장자를 많이 들어본 사람도 있을 것이다. 몇 년 전 다들 아직 저작권이란 개념이 많이 없었던 시기에 여기저기 소위 말하는 크랙 파일들이 많이 돌아다녔다. 유료 게임의 크랙 버전이나 무료 게임이라도 재화가 무제한으로 주어지는 등의 크랙 파일이 기억에 남는다. 물론, 그런 출처가 불분명한 파일들을 다운로드 받는다는 것 자체가 해킹의 표적이 될 수 있다는 사실도 다들 간과했을 것이다. 나는 께림칙해서 기피했지만 말이다. 다시, 본론으로 돌아가 APK에 대해 알아보자. APK(Android Application Package)는 하나의 완성된 앱이라고 할 수 있다. APK의 생성과정을 살펴보면 이..
오늘은 저번 글과 비슷한 느낌으로 공부 계획? 방향?을 고민하다 찾은 결과이다. 막연히 저번 글에서 소개했던 Developer 사이트의 가이드를 따라 읽다가 이렇게 공부하는 것이 맞나 라는 생각이 들어 자세한 로드맵을 세워 보고자 검색해보게됐다. 구글에 Android developer roadmap 을 검색하면 두 번째로 나오는 깃허브 링크를 발견했다. 신기했던 점은 작성자 분이 한국인이셔서 무려 한국어 지원이 된다는 점이 가장 눈에 띄었다. 그리고 이 로드맵을 보면서 나는 얼마나 부족한가를 다시 한 번 깨닫게 되었다. 물론 이 전의 면접이나 다른 사람들의 프로젝트 파일을 깃허브에서 보며 부족한 점을 느끼고 있었지만 이런 자료들을 보거나 eo 채널에서 다른 개발자분들의 영상을 보면 더욱 동기부여가 되는 ..
데이터 바인딩을 공부하는 이유 요즘 안드로이드에서 가장 많이 사용되는 아키텍처 패턴은 역시 MVVM 패턴이라 할 수 있다. 이 패턴을 프로젝트에 적용할 때, 안드로이드에서는 AAC(Android Architecture Components)를 제공하는데 나는 아직 이 컴포넌트들이 어디에 어떻게 사용되는지 정확히 모르겠다. 일단 데이터 바인딩이 안드로이드에서 MVVM 패턴을 적용할 때 사용되기도 하고.. 또, 구글에 Android MVVM 학습 순서, Android Developer 사이트에서 MVVM을 검색하면 ViewModel 클래스가 가장 먼저 나오고 샘플 코드에 observe()나 Observer 등의 observe 라는 메소드, 자료형이 나오기 때문이었다. 물론 위의 생각은 나의 오판일수도 있다. ..