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

SharedPreferences를 계속 써도 될까요???

0 추천
단어 암기 앱을 만들었습니다. 자신이 직접 외우고 싶은 것을 입력하고 외우는 앱입니다.

뜻과 영어 철자를 입력 받으면 ArrayList에 저장하고 JSON으로 변환하고 SharedPreferences로 저장했습니다.

처음에 SQLite를 쓸까 고민했었지만 상대적으로 SharedPreferences가 간단해보여서 이런 방식으로 작성했습니다.

사용자들이 사용하면서 아직까지 오류가 난 적은 없지만 오류가 나는게 시간문제라고 생각해서 질문합니다
Mando (200 포인트) 님이 2021년 3월 3일 질문
데이터 처리하는 부분의 코드를 짜실 때 바로 데이터베이스에 접근해서 하지 마시고 중간에 한단계를 걸러주는 레이어를 사용하세요. 보통은 Data Layer하고 하는데, 예를 들면 DB 에 사용자 정보를 처리한다면,

interface UserDao {
    fun getUsers(): List<UserEntity>
    fun getUserById(userId: String): UserEntity?
    fun add(user: UserEntity)
    fun update(user: UserEntity)
    fun delete(user: UserEntity)
}

class UserDaoImpl: UserDao {
 ...
}

class UserRepository( private val userDao: UserDao) {
     fun getUsers(): List<User>
}

이런 식으로 인터페이와 실제 구현을 분리하시는 것이 추후에 요구사항이 변경될 때 작업을 최소화할 수 있는 방법입니다. 예를 들면, 현재는 데이터를 SQLLite저장하지만 추후에 Firebase나 서버의 API를 통해 저장한다고 생각해 보시면 이해가 가실 겁니다. 이 경우 직접 SQLLite 다루는 클래스를 가져다 쓰시면 변경할 사항이 많아지면서 원치않은 클래스까지 건드리게 됩니다. 위의 예처럼 구조를 설계하시면 UserDao정도만 건드리면 되므로 변경을 최소화할 수 있습니다.

1개의 답변

0 추천
 
채택된 답변
정답은 이미 알고 계시네요.

저장하는 데이터양이 많아질수록 SQLite로 가는게 맞는 선택이 되겠죠. 말씀하신 오류와 관련해서는 가끔이긴 하지만 파일이 깨지는 경우가 발생합니다. 그 경우에 입력한 데이터가 다 날아가느냐. 자동으로 일정 부분 복구가 되느냐의 차이가 있겠지요.

앱을 다른 사용자에게 제공하는 입장에서 생각해본다면 저장되는 양이 많지 않은 경우 그리고 사용자가 아직 많지 않은 경우에 오류가 발생할 일은 많지 않습니다. 일단 사용자들이 원하는 기능을 우선으로 구현하되 장기적으로 사용자가 많아지거나 저장할 데이터가 많아지는 경우를 고려해 데이터 저장 방법을 변경하는 것이 필요해보입니다.

앱 개발 공부를 하는 입장에서 생각해본다면 SQLite는 반드시 한번 해보고 지나가야할 부분이기도 합니다.
회색 (21,000 포인트) 님이 2021년 3월 4일 답변
Mando님이 2021년 3월 11일 채택됨
...