Retrofit

노준혁·2023년 1월 1일
0

https://square.github.io/retrofit/
https://github.com/square/retrofit
https://todaycode.tistory.com/38
https://salix97.tistory.com/204
https://galid1.tistory.com/501
https://velog.io/@jeongminji4490/Android-Retrofit


  • Retrofit
    • Server <-> Client 간 HTTP communication을 위한 Library
    • Android에서 HTTP communication 지원
    • OKhttp -> 개선 -> Retrofit

보통 아래 3가지로 클래스 구조 형성

  • DTO data class
  • http setting interface
  • Retrofit instance

  • DTO
    • Data Transfer Object
    • 계층 간 데이터 교환을 위해 사용하는 Object
    • 로직을 가지지 않는 데이터 Object

  • Build.gradle
implementation 'com.squareup.retrofit2:retrofit:latest.version'
implementation 'com.squareup.retrofit2:converter-gson:latest.version'
-> version : 2023-01-02 : 2.9.0

https://techblog.woowahan.com/2550/

  • Java Serializable

    • 자바 시스템 내부에서 사용되는 object 또는 data를 외부의 자바 시스템에서도 사용할 수 있도록 byte형태로 data 변환
  • Java Deserialization

    • byte로 변환된 data를 다시 object로 변환
  • 문자열 형태의 Serialization 방법:

    • data를 문자열 형태로 확인 가능한 Serialization
    • API, data 변환추출 시에 활용
    • CSV, XML, JSON format 형태로 수행
  • Data exchange in Java serialization form -> 자바 시스템 간의 데이터 교환을 위해 존재


  • Json
    • object -> {}로 표기
    • array -> []로 표기
    • key:value Pair로 구성
  • Gson
    • https://github.com/google/gson
    • Java Objects를 JSON representation으로 변환하는 데 사용하는 Java Library
    • JSON string을 equivalent Java object로 변환
    • 직렬화된 JSON string format data를 Java object로 역직렬화하여 사용
    • JSON object <-> Java Object
  • Gson Converter

  • Android 인터넷 접속 퍼미션 setting -> AndroidManifest
    • 앱 <-> 서버 간 http 통신 허용

API 통신으로 서버에서 받은 JSON data를 GSON converter를 통해 java object로 변환하는데, 이를 저장하기 위해 data type에 맞는 data class를 가지고 있어야 함.

  • data를 보유하는 것을 주된 목적으로 하는 클래스에서 자주 쓰이는 메소드와 유틸리티 기능을 자동으로 가지고 있는 class

    • 컴파일러는 기본 생성자에 다음 멤버메소드를 자동으로 파생시킴.
      -> equals()
      -> hashCode()
      -> toString()
      -> componentN()
      -> copy()
    • 다른 클래스를 상속 받지 못함
  • 기존 java class 단점

    • 기존 java에서 클래스를 정의한다면, 멤버 메소드로 getter, setter, toString 등을 목적에 맞게 정의, 오버라이딩 해줘야 함.
      -> 보일러 플레이트 코드 증가
  • kotlin data class 장점

    • 이런 멤버 메소드를 정의하지 않아도, data class는 자동으로 위 멤버 메소드들을 정의해줌.
    • 코드 간결
    • data를 보유하는 것을 목적으로 하는 클래스 다루기 편리
    • Destructuring Declaration을 통한 가독성 향상
    • 보일러 플레이트 최소화
  • @SerializedName("ㅁㅁㅁ") 어노테이션

  • Gson Library 어노테이션
  • 이 어노테이션을 통해 기존의 JSON 변수의 name을 특정 변수명으로 매핑시켜 사용할 수 있음.

  • 빌더 객체 생성 -> Retrofit 객체 생성
  • addConvertFactory()
    • HTTP 통신 데이터 형태인 JSON을 java Object로 변환하는 converter 삽입

  • Retrofit 통신 방법: 1. enqueue(비동기), 2. execute(동기)
    -> 통신 성공 : invoke onResponse() -> reponse.body()를 통해 요청data 할당
    -> 통신 실패 : invoke onFailure()
  • Retrofit Service class = API를 정의하는 interface
  • Retrofit Repository class = Retrofit 객체 생성 관련
profile
https://github.com/nohjunh

0개의 댓글