본문 바로가기

[Android] Retrofit2 싱글톤패턴 적용하기

@hyeon.s2022. 11. 26. 17:08

Retrofit2 싱글톤패턴 적용하기

UMC 안드로이드 세미나에서 retrofit2 를 사용하는 방법을 배웠다. 당시 세미나에서 retrofit를 사용할 Activity에다가 build를 하셨다. 그렇다면 retrofit을 통해 서버와 데이터를 주고받을 activity전부에 저렇게 build를 다 해야하는건가 의문이 생겼고, 관련 질문을 하니 싱글톤패턴에 대해서 알려주셨다! 이를 기억하기위해 블로그에 작성해보고자 한다.

싱글톤 패턴이란?

객체의 인스턴스가 오직 1개만 생성되는 패턴을 의미한다. 싱글톤패턴을 사용하면 1번의 정의만으로 전역적으로 사용할 수 있다. 그러므로 NetworkService, DatabaseService등 하나의 객체만 필요 할 경우 사용된다!

사용이유

싱글톤패턴으로 인스턴스를 생성하면 여러번의 정의를 통한 불필요한 메모리 낭비를 방지 할 수 있기때문이다.

이 상태에서
싱글톤패턴을 적용하면 이렇게 된다.

적용방법

기존 Retrofit을 적용하는 방식과 동일하나 Retrofit build 부분을 object로 만든다.

RetrofitService.kt

import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory

object RetrofitService {
    private const val BASE_URL = " "

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

RetrofitAPI.kt

interface RetrofitAPI {
    @GET(" ")
    fun getMovie(
        @Query("key")key:String,
        @Query("weekGb")weekGb:Int,
        @Query("targetDt")targetDt:Int,
        @Query("itemPerPage")itemPerPage:Int
    ) : Call<Movie>
}

MainActivity.kt

//생략
val retrofit = RetrofitService.retrofit
        retrofit.create(RetrofitAPI::class.java).getMovie(keyValue,0,20220101,10)
            .enqueue(object : Callback<Movie> {
                override fun onResponse(call: Call<Movie>, response: Response<Movie>) {
                    Log.e("Success",response.body().toString())
                    val dataList = response.body()?.boxofficeResult?.weeklyBoxOfficeList
                    initAdapter(dataList!!)
                }

                override fun onFailure(call: Call<Movie>, t: Throwable) {
                    Log.e("Failure",t.message.toString())
                }
            })
    }

이렇게 적용하면 된다~ 배우고나니 스윗 프로젝트에서 다른 팀원분이 만들어두신게 바로 이 object였다는걸 알게되었다.

프로젝트 끝나고 다시 공부하면서 깨닫게되는게 많은거같다,,

 

사진 출처: https://velog.io/@haero_kim/혹시-싱글톤이세요-저는-벙글톤이에요-ㅋㅋㅋ

hyeon.s
@hyeon.s :: 개발로그
목차