- 종속성 및 인터넷 권한 추가
- Model 정의
- Retrofit API 정의
- Retrofit Client 정의
- Activity or Fragment에서의 사용
Retrofit이란
안드로이드의 HTTP 통신을 구현하는 여러 라이브러리 중 한개입니다.
MVVM 패턴을 사용하며 이를 통해 view, model, viewmodel간 의존성이 없다는 것이 특징입니다.
GSON이란
자바 객체 형식을 JSON 형식으로 직렬화 혹은 역직렬화를 도와주는 라이브러리입니다.
자세한 것은 직렬화 포스팅을 참조해주세요.
전체적인 flow chart
종속성 및 인터넷 권한 추가
build.gradle
//retrofit
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
res/AndroidManifest.xml
<!-- 인터넷 권한 선언 -->
<uses-permission android:name="android.permission.INTERNET" />
Model 정의
학번과 비밀번호를 저장한 User를 예로 들어보겠습니다.
주로 Model은 HTTP 통신을 위해 쓰이는 POJO 형식의 객체입니다.
Dto 형식으로 많이 만듭니다.
RequestDto
서버에게 요청할 데이터를 직렬화하여 보냅니다.
ResponseDto
서버로부터 온 데이터를 자바 객체로 역직렬화 합니다.
여기서 직렬화와 역직렬화를 도와주는 Gson 라이브러리의 어노테이션이 있습니다.
@SerializedName(" ~~ ")
JSON의 name값을 마킹(인식)하여 직렬화를 통해 자바 객체로 옮겨줍니다.
password라는 JSON형식의 데이터가 왔다고 하면
이 어노테이션에 "password"라고 명시해두면 알아서 자바 객체의 pd에 역직렬화되어 옮겨짐을 알 수 있습니다.
// JSON
{
"password" : "abc"
}
// Java Object
public class User {
@SerializedName("password")
private String pw;
}
@Expose
object중 해당 값이 null일 경우에 JSON으로 만들 필드를 자동으로 생략해줍니다.
GSON의 직렬화 역직렬화
JSON의 value 안에 또다른 name:value 형태가 들어있을 경우에
자바 객체로 표현하기 위해서, 그 안에 또다른 클래스를 만들어야 합니다.
이 과정을 자동으로 만들어주는 사이트가 있습니다.
Convert XML or JSON to Java Pojo Classes - Online
pojo.sodhanalibrary.com
Retrofit API
서버 API를 보고 해당 spec에 맞게 HTTP 메서드, 서버 전송 쿼리 URL 지정 등을 설정하면 됩니다.
이렇게 서버 네트워킹을 위한 메서드를 interface의 추상적인 메서드로 만들면, 자동으로 이 정보에 맞게 서버를 연동할 수 있는 Call 객체로 만들어줍니다.
public interface RetrofitAPI {
@POST("/api/users/login")
Call<UserResponseDto> login(@Body UserRequestDto userRequestDto);
}
통신 이후에 Callback 객체를 반환합니다.
Retrofit Client
Retrofit의 본체를 생성하는 단계입니다.
builder 패턴을 사용하여 각종 설정정보를 넣어 만듭니다.
singleton 패턴을 사용하여 static으로 만들어 인스턴스 1개만을 유지시킵니다.
- baseUrl() : Retrofit을 이용할 때 기본적으로 적용되는 서버 URL * localhost라고 적으면 작동하지 않습니다.
- addConverterFactory : 서버와 통신할 데이터 타입에 맞는 컨버터를 지정합니다. 위 예시의 경우에는 GsonConverterFactory를 지정하였기 때문에 JSON 데이터를 Gson 라이브러리로 파싱하고 그 데이터를 Model에 자동으로 담아줍니다.
public class RetrofitClient {
private static RetrofitClient instance = null;
private static RetrofitAPI retrofitAPI;
private RetrofitClient() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("Http://127.0.0.1:8080/") // not localhost:8080
.addConverterFactory(GsonConverterFactory.create())
.build();
retrofitAPI = retrofit.create(RetrofitAPI.class);
}
public static RetrofitClient getInstance() {
if (instance == null) {
instance = new RetrofitClient();
}
return instance;
}
public static RetrofitAPI getRetrofitAPI() {
return retrofitAPI;
}
}
사용
Activity나 Fragment에서 본격적으로 사용하면 됩니다.
- Retrofit 인스턴스 가지고 오기
- REtrofit API 가지고 오기
- API 메서드 실행 후 enqueue를 통해
- 응답이 성공한 경우(200이든 404든 응답이 오면) onResponse로 처리합니다.
- 응답에 실패한 경우(응답을 아예 못받음) onFailure로 처리합니다.
enqueue에서는 비동기 요청과 콜백, 오류 등을 모두 모아서 보여주는 역할을 담당합니다.
response가 있는데 이 객체 안에
header, code, body 데이터를 가지고 올 수 있습니다.
참조
안드로이드의 HTTP 통신 라이브러리 고찰
이번 포스팅에서는 안드로이드의 HTTP 통신에 대해 알아보도록 하겠습니다. 안드로이드에서의 통신 앱에서 가장 많이 수행하는 처리중 하나는 서버에 데이터를 요청하고 받아온 데이터를 단말-
cliearl.github.io
[안드로이드] Retrofit 기본 사용법
이전에 Retorfit이 왜 필요하고 기본적인 구조는 어떻게 되어 있는지 알아봤으니 사용하기 위해 준비해야 하는 작업과 간단한 사용법을 알아보도록 하자. [깡샘의 안드로이드 프로그래밍] 책을 기
week-year.tistory.com
Android / Java Retrofit2 완전 쉬운 사용법 / 예제 feat. POJO Class 자동생성 사이트 #TIL 68
네이티브로 돌아온 느낌은 꽤나 신선하다. 오늘은 현직에서도 자주 사용되고 있는 Retrofit을 다루려고 한다. 보통 서버 api 통신을 할 때 편리하고 간단하게 사용될 수 있는 라이브러리로써 많은
daldalhanstory.tistory.com
[JSON] Json 정리 및 사용
JSON에 사용법에 대한 정리.
velog.io
[Retrofit] Retrofit 2 HTTP 클라이언트 시작하기
이 문서는 Get Started With Retrofit 2 HTTP Client를 번역한 문서입니다. Retrofit 2 HTTP 클라이언트 시작하기 Retrofit? Retrofit은 Android 및 Java용 Type-Safe(예측 불가능한 결과를 내지 않는) HTTP 클라이언트입니다.
chuumong.github.io
Convert XML or JSON to Java Pojo Classes - Online
pojo.sodhanalibrary.com
'Frontend > Android' 카테고리의 다른 글
[Android] Activity 생명 주기 (0) | 2022.12.01 |
---|