Repository Pattern
Repository Pattern ?
저장소 패턴이다.
저장소 클래스는 저장소를 구현한다. 또한 단일 또는 여러 소스로부터 데이터를 액세스하는 로직을 캡슐화하고,
로컬 데이터베이스나 원격 서버로부터 특정 데이터셋을 가져오거나 저장하는 방법을 결정한다.
그리고 UI코드에서는 저장소에 모든 데이터를 요청한다.
UI는 어떻게 데이터를 저장하거나 가져오는지에 관여하지 않는다. 이러한 작업은 저장소에서 따로 처리한다.
저장소 클래스는 싱글톤이다.
데이터를 가져오는 것만 처리하는 코드는 아래와 같다.
package com.bignerdranch.android.criminalintent
import android.content.Context
// 이 저장소 클래스는 싱클톤이다. : 앱이 실행되는 동안 하나의 인스턴스만을 생성된다는 의미이다.
class CrimeRepository private constructor(context:Context) {
companion object{
private var INSTANCE : CrimeRepository? = null
fun initialize(context: Context){
if(INSTANCE == null){
INSTANCE = CrimeRepository(context)
}
}
fun get() : CrimeRepository{
return INSTANCE?: throw IllegalStateException("CrimeRepository must be initialized")
}
}
}
싱글톤이기 때문에 인스턴스는 하나만 생성했다. 싱글톤은 앱이 실행되는 동안 하나의 인스턴스만 생성된다는 의미이다.
싱글톤은 앱이 메모리에 있는 한 계속 존재해 있다.
이러한 특징을 살려서 싱글톤이 갖는 속성(가져온다거나, 쓴다거나)은 액티비티나 프래그먼트의 생명주기에 영향을 받지 않고 유지한다. (물론, 안드로이드 운영체제가 메모리에서 앱을 제거하면 같이 소멸된다.)
즉, 싱글톤은 데이터를 장기간 저장하기 위해 해결채이 될 수 없지만, 대신에 앱에서 데이터를 갖고 있으면서 컨트롤러 클래스 간의 데이터를 쉽게 전달하는 방법을 제공하는 것이다.
initialize 함수는 선언한 인스턴스를 생성하는 함수이다.
get 함수는 기존에 생성된 인스턴스를 반환하는 함수이다. 생성이 안되었다면, 예외처리 된다.(IllegalStateException)
그리고, 저장소 클래스에 생성자를 private으로 지정하였다. 외부에서 Repository.initialize(Context)를 호출해야만 저장소 인스턴스를 생성할 수 있게 하는 것이다.
'Programming > Android' 카테고리의 다른 글
Thread (0) | 2021.07.27 |
---|---|
JetPack AAC: Room (0) | 2021.07.26 |
Layout Design (0) | 2021.07.25 |