hyeon.s
개발로그
hyeon.s
전체 방문자
오늘
어제
  • 분류 전체보기 (151) N
    • Web 및 인프라 (1)
      • Web (1)
      • Terraform (2)
      • Docker (1)
    • Android (1)
      • 공부 (28)
      • 트러블슈팅 (12)
      • 프로젝트 개발 (10)
      • Compose (2)
      • 우테코 프리코스 (0)
    • Server (6) N
      • 공부 (1)
      • Spring (5) N
    • 알고리즘 (68)
      • 문제풀이 (C++,Kotlin) (54)
      • 공부 (13)
    • 디자인 (3)
      • UI (3)
    • Language (5)
      • Kotlin (5)
      • JAVA (0)
    • IT 동아리 (8)
      • UMC 3기 (Android) (7)
      • Sopt 32기 (Android) (1)

Github

글쓰기 / 관리자
hELLO · Designed By 정상우.
hyeon.s

개발로그

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

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

2022. 11. 26. 17:08
728x90

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/혹시-싱글톤이세요-저는-벙글톤이에요-ㅋㅋㅋ

728x90
저작자표시

'Android > 공부' 카테고리의 다른 글

[Android] 알림 커스텀과 안드로이드 13 알림 권한 설정  (0) 2023.07.21
[Android] Intent 정리하기  (0) 2023.04.26
[Android] Recyclerview item Click / Click Listener 등록하는 법  (0) 2022.11.01
[Android] RecyclerView란? / RecyclerView Adapter 사용법  (0) 2022.10.26
[Android] RecyclerView 데이터 추가/삭제/수정 반영 방법  (0) 2022.10.26
'Android/공부' 카테고리의 다른 글
  • [Android] 알림 커스텀과 안드로이드 13 알림 권한 설정
  • [Android] Intent 정리하기
  • [Android] Recyclerview item Click / Click Listener 등록하는 법
  • [Android] RecyclerView란? / RecyclerView Adapter 사용법
hyeon.s
hyeon.s
이유있는 코드를 짜자

티스토리툴바