Developer Geek

Android Retrofit Singleton Example in Kotlin 본문

안드로이드/Network

Android Retrofit Singleton Example in Kotlin

devGeek 2022. 6. 2. 10:02
반응형

Retrofit Singleton

 

 

Retrofit2 in Kotlin

개요 모바일에서 HTTP API 통신을 할 때 사용하는 라이브러리이다. REST 기반의 웹서비스를 통해 JSON 구조를 쉽게 가져오고 업로드할 수 있다. HTTP API를 Interface로 구현할 수 있다. interface GitHubService..

devgeek.tistory.com

 

Singleton Class in Kotlin

개요 앱에서 딱 한번만 생성되고 전역에서 사용할 객체가 필요하다면 우린 Singleton Pattern을 사용하면 된다. Singleton Pattern 은 해당 클래스에서 오직 하나의 객체만을 사용하도록 제한하는 것이다.

devgeek.tistory.com

왜 Retrofit을 Singletone으로?

Singleton Class가 사용되는 이유는 일반적으로 객체를 생성하면 시스템 리소스가 객체가 생성되는 만큼 사용되기 때문이다. 그래서 각각의 객체를 생성해 리소스를 사용하기보다는 하나의 객체를 생성해 필요할 때마다 객체를 생성하지 않고 같은 객체를 사용하는 것이다.

Singleton Class 대표적 특징은 아래와 같다.

  1. Only one instance: Singleton Class는 해당 클래스에 하나의 객체만을 제공한다. 또한 outer classessubclasses에서 해당 객체 생성을 막는다.
  2. Globally accessible: Singleton 객체는 전역에서 접근하여 사용할 수 있다.
  3. 그래서 NetworkService, DatabaseService 등 오직 하나의 객체만 필요한 경우에 사용된다.

Retrofit 객체 Singleton 사용 예제

build.gradle(:app): Retrofit 사용을 위한 Dependency 추가, GsonConverter 추가 

dependencies {
    ..
	
    // https://mvnrepository.com/artifact/com.squareup.retrofit2/retrofit
    implementation("com.squareup.retrofit2:retrofit:2.9.0")

    // gson converter
    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
    
    ..
}

RetrofitClient.kt

object RetrofitClient {
    private const val BASE_URL = "https://run.mocky.io"

    val retrofit: Retrofit = Retrofit.Builder()
        .baseUrl(BASE_URL)
        .addConverterFactory(GsonConverterFactory.create())
        .build()

}

ProductService.kt

interface ProductService {
    @GET("v3/9fb33b80-8b3a-4c9f-b608-764bc60eae98")
    fun getProducts(): Call<ProductDto>

}

MainActivity.kt

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        ...

        val retrofit = RetrofitClient.retrofit
        retrofit.create(ProductService::class.java).getProducts()
            .enqueue(object : Callback<ProductDto> {
                override fun onResponse(call: Call<ProductDto>, response: Response<ProductDto>) {
                    Log.d(TAG, "onResponse: ${response.body()}")
                }

                override fun onFailure(call: Call<ProductDto>, t: Throwable) {
                    Log.e(TAG, "onFailure: ${t.message}")
                }
            })
    }
}
반응형

'안드로이드 > Network' 카테고리의 다른 글

Retrofit + Interceptor 예제 in Kotlin  (0) 2022.06.09
OkHttp Interceptor in Android Kotlin  (2) 2022.06.08
Retrofit2 in Kotlin  (0) 2022.05.30
Retrofit2 in Java  (0) 2022.05.29
안드로이드 인터넷 접근 권한 허용  (0) 2022.05.05
Comments