이전 글에서 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..
이번 글이 피자 나눠 먹기 문제 시리즈의 마지막이다. 문제 먼저, 사람이 최소 피자 한 조각을 먹는다는 조건을 생각해야 했다. 여기서 slice에 곱한 값이 n보다 크면 무조건 n명의 사람은 피자를 한 조각 이상씩 먹을 수 있다. 그래서 for문을 사용해 1부터 1씩 증가하는 조건을 사용하려 했는데 마지막 숫자를 정하기가 애매했다. 100을 써도 1000을 써도 되지만 최댓값을 너무 크게 잡고 싶지 않았다. 그래서 문제의 제한사항에 있는 각 변수의 조건을 생각해봤다. for문이 가장 많이 실행될 때의 i값이 뭘까? slice가 최솟값, n이 최댓값이라면 i값이 최대일 것이다. 이 때, i는 50이기 때문에 for문을 1부터 50까지만 반복하도록 했다. 그 다음, for문 안에서 if문을 통해 위에 적은 ..