마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

퀴즈 앱 데이터 저장 sharedPreference 도와주세요

0 추천
안녕하세요. kotlin으로 퀴즈 앱을 만드는데 도움 구하고 싶습니다.

QuestionActivity 에는 1개의 문제 textView와 3개의 보기 textView가 있고,

data class와 object 파일을 통해 여러 문제들의 id, 문제, 보기(3개), 정답 등을 규정하여

QuestionActivity에서 이 100여 개의 문제들을 받아올 수 있게 했습니다.

 

그런데 정답을 맞히면 다음 문제가 순서대로 나오길 원하다보니

정답인 보기를 클릭했을 때 CurrentPosition  이라는 Int 변수가 ++ 되게 했고

그러면 연동된 data class에 따라 문제와 보기가 자동으로 변경되는 방식으로 연구 중입니다.

 

그래서 앱을 껐다가 키게 되면 이 CurrentPosition 변수가 이전에 문제를 풀었던 만큼 ++ 된 상태로

유지되었으면 좋겠는데, sharedPreference를 통해 putInt, getInt 등을 이것저것 건드려보다 잘 안 되어

이렇게 질문 남깁니다.. sharedPreference를 통해 해결될 문제인지, 또 다른 방식의 데이터 저장을

추천하시는지 알려주셨으면 좋겠습니다. 감사합니다.
고래가그랬어 (190 포인트) 님이 2021년 12월 16일 질문

1개의 답변

+1 추천
 
채택된 답변
이론적으로 SharePrefrence, File, DB 등 어떤 저장소를 사용하던 상관은 없습니다. 데이터가 많아진다면  type safe, 비동기 처리의 지원 부족 등의 이유로 SharedPreference는 그다지 권장하지 않는 옵션이긴 합니다. 유저의 세팅같은 아주 간단한 것들을 저장하기에 적합하도록 설계가 되었기 때문입니다. Jetpack에서 type safe 한 대체라이브러리를 지원하기 시작했는데, 아직은 초장기 버전인 것 같습니다.

혹, 여기에 기능을 더 추가해서 저장소에 더 많은 데이터를 저장해야 한다면(예를 들면, 히스토리 기능, 틀린 문제 모아보기 등등) Room같은 DB가 더 적합한 선택이 될 겁니다.

그리고 마지막 Question의 위치는 저장소의 유형과는 전혀 상관이 없습니다. 어떻게 구현하느냐의 문제입니다. 이 문제를 접근하시는 방법은 사용자가 문제를 넘길 때 문제의 위치를 저장하던가, 아니면 라이프 사이클 이벤트를 오버라드 해서 (액티비티 콜백, 라이프사이클 콜백, ProcessLifecycle 등등의 옵션이 있습니다.) onStop같은 데서 현재 사용자가 풀고 있는 문제의 위치를 저장하면 될 것 같습니다.  그리고 퀴즈화면에 들어오면 먼저 저장된 문제의 위치를 읽어와서 저장된 값이 존재한다면, 문제의 인덱스를 체크해서 인덱스가 안전한 범위이면 거기서부터 보여주면 되구요, 그렇지 않은 경우라면 문제를 처음부터 보여주면 될 것 같습니다. 만약 인덱스가 벗어난 경우는 에러처리를 하셔야 겠죠.

일단은 구현이 쉽고 변경이 쉬운 쪽으로 구현을 하시면 될 것 같아요.

저같은 경우는 예전에 퀴즈관련 앱을 공부삼아 릴리즈 했었는데, Kotlin, Clean Architecture, ViewModel + LiveData, Room DB + FireStore 를 사용했었습니다. 퀴즈, 문제와 답을 나타내는 데이터 구조만 잘 가져가면 로직자체는 그렇게 어렵지 않을 듯 합니다.
spark (226,420 포인트) 님이 2021년 12월 16일 답변
고래가그랬어님이 2021년 12월 16일 채택됨
감사합니다. 제가 부족해 완전히 이해하진 못했지만 나름의 인사이트를 얻고 방향성을 얻게 된 것 같습니다. 감사합니다!
...