[Android] SharedPreference 로 로그인 기능 구현

Madeline👩🏻‍💻·2023년 1월 12일
0

kotlin study

목록 보기
17/19

1. SharedPreference가 뭐야

SharedPreferences는 안드로이드에서 Map과 같이 key-value 방식으로 간단하게 데이터를 저장하는 방식이다.
SharedPreferences의 장점은 구현이 쉬우면서 app이 재부팅되도 데이터가 유지된다는 점이다.
하지만 앱을 삭제할 시에 데이터들이 삭제가 된다는 점은 유의하자!

앱을 개발하다 보면 다양한 데이터를 저장하여 관리하여야 하는 상황이 존재하는데 이때 간단한 설정 값이나 문자열 같은 데이터를 저장하기 위해서는 서버나 DB를 사용하기에는 부담스럽기 때문에 SharedPreferences를 사용하는 것이 적합하다.

2. 인터셉터는 뭐야

Interceptor 활용
JWT과 같은 인증정보처럼 모든 요청의 헤더에 포함되어 있어야 하는 정보들은 @Header 어노테이션으로 모든 API에 일일이 토큰 헤더를 붙이는 것은 코드의 중복도 심하고 관리하기도 번거롭다.

okHttp3의 Intercepotor를 활용하면 API마다 일일이 헤더를 직접 추가해주지 않아도 모든 Request에 자동으로 헤더를 추가한 다음 요청을 보내게 된다.

.addHeader("(header Key)", "(header Value)") 에 지정된 헤더 정보가 모든 요청에 자동적으로 추가된다.

3. 자동 로그인 기능

key - value 방식으로 저장

=> edit 객체 선언 ( 수정, 추가, 삭제 가능 )

=> shared preference 에 저장할 변수 지정

=> apply() 로 적용(저장)

0. 데이터 저장하는 함수를 만들자

1. 데이터 베이스 클래스를 만들자

https://jminie.tistory.com/m/169

SharedPreference를 변수로 가지고 있는 PreferenceUtil 클래스를 생성한다. getString()은 데이터를 가져오는 메서드이고 setString()은 데이터를 저장하는 메서드이다.

import android.content.Context
import android.content.SharedPreferences

class PreferenceUtil(context: Context) {
    private val prefs: SharedPreferences =
        context.getSharedPreferences("prefs_name", Context.MODE_PRIVATE)

    fun getString(key: String, defValue: String): String {
        return prefs.getString(key, defValue).toString()
    }

    fun setString(key: String, str: String) {
        prefs.edit().putString(key, str).apply()
    }
}

여기서 context.getSharedPreferences의 두 번째 인자에 MODE가 들어가게 되는데, MODE의 종류는 다음과 같다.
MODE_PRIVATE : 생성한 Application에서만 사용 가능하다.
MODE_WORLD_READABLE : 외부 App에서 사용 가능, 하지만 읽기만 가능하다
MODE_WORLD_WRITEABLE : 외부 App에서 사용 가능, 읽기/쓰기 모두 가능하다

SharedPreferences 클래스는 앱에 있는 다른 Class보다 먼저 생성되어야 다른 곳에 데이터를 넘겨줄 수 있다. 그러기 위해서 Application에 해당하는 클래스를 생성한 뒤, 전역 변수로 SharedPreferences를 가지고 있어야 한다. Application()을 상속받는 클래스를 생성하여, onCreate() 보다 먼저 prefs를 초기화해준다. 필자는 Hilt를 사용하기 때문에 미리 생성되어 있는 MainApplication에서 이 작업을 수행하였다.

@HiltAndroidApp
class MainApplication : Application() {
    companion object {
        lateinit var prefs: PreferenceUtil
    }

    override fun onCreate() {
        super.onCreate()
        prefs = PreferenceUtil(applicationContext)
    }
}

레퍼런스

https://jangstory.tistory.com/7?category=874426

https://jminie.tistory.com/m/169

https://jminie.tistory.com/m/156

profile
Major interest in iOS 🍀 & 🍎

0개의 댓글