티스토리 뷰
Retrofit
: Retrofit은 앱과 서버 간의 API통신을 쉽게 만들어주는 라이브러리다.
Retrofit의 구성
1 ) 네트워크 통신에 필요한 전반적이 설정을 관리하는 Retrofit Client (Retrofit 객체 생성)
2 ) 통신할 API의 HTTP Method를 정의하는 Service Interface. (API Service)
3 ) Request & Response (Call, CallBack java 코드)
4 ) DTO ( Data Transfer Obejct ) : 데이터 송/수신시 서버에 (User) 정의해 놓은 Object의 데이터 형식에 맞게 작성해 놓은 클래스
@SerializedName - json 으로 serialize 될 때 매칭되는 이름을 명시하는 목적으로 사용되는 field 마킹 어노테이션
@Expose - Object 중 해당 값이 null일 경우, json으로 만들 필드를 자동 생성
Retrofit 사용방법
1. 인터넷 사용권한 설정
< uses-permission android:name="android.permission.INTERNET" />
2. Retrofit 객체 생성과 Retrofit Builder 설정
Retrofit retrofit = new Retrofit.Builder()
.baseURL(“https://api.github.com/”)
.addConVerterFactory(GsonConverterFactory.create())
.build();
우선 Retrofit 객체를 저장할 Retrofit Type의 변수를 하나 선언한다. 그리고 Retrofit에서 제공하는 Retrofit.Builder객체를 이용하여 몇 가지 설정을 한다
baseURL() 메서드를 이용하여 어떤 서버(주소,URL)로 네트워크 통신을 요청할 것인지 설정하고,
addConverterFactory( ) method를 이용하여 , 통신이 완료된 후 어떤 Converter를 이용하여 데이터를 파싱할 것인지 설정한다.(Gson)
마지막으로 build() method를 통해 , Retrofit.Builder객체에 설정한 정보를 이용하여 실질적으로 Retrofit 객체를 만들어 반환한다.
3. API interface 선언
Public interface GithubService{
@GET(“users/{user}/repos”)
Call <JSsonArray> getUserRepositories(@Path(“user”)String userName);
}
// @GET : HTTP통신에 사용되는 method 중 GET요청을 하겠다고 명시해주는 Annotatio이다.
// @GET(“API 주소”)
// Call <ResponseBody> getComment(@Query(“변수이름”),안드로이드에서 보낼 변수)
// ex .http://www.jsonplaceholder.typicode.com/comments?postId=1
// Call<JsonArray> : Retrofit은 Call<T>형태의 Generic Type을 매개변수로 받는 Callback interface이다.
// @Path. : URL 부분 중 일부의 경로가 필요에 따라 동적으로 바인딩 되어야 하는 경우 사용한다. @Path Annotation을 지정하여, 문자열을 정의해두면 해당 문자열을 URL부분 일부에 바인딩하여 동적으로 URL을 만들 수 있도록 도와준다.
Retrofit의 객체와 해당 Interface의 method를 이용하여 통신을 구현하면
https://api.github.com/ 과 users/{user}/repos URL이 합쳐진 완성된 URL을 통해 요청할 수 있다. 그렇기 때문에 Interface에 정의되는 URL은 서버URL을 제외한 나머지 URL만 작성하면 된다.
Call<JsonArray>는 Retrofit이 미리 선언해둔 Call<T> 형태의 Callback Interface이다. 추후에는 실질적인 구조에 맞게 작성된 데이터 클래스를 지정하도록 하겠지만, 위에서는 JsonArray 타입을 지정하여 Callback으로 JsonArray타입의 데이터를 전달 받을 수 있도록 하였다.
4. 클라이언트 객체 생성 및 요청
GithubService service = retrofit.create(GithubService.class);
Call<JsonArray> request = service.getUserRepositories(“dev-juyoung”);
Request.enqueue(new Callback<JaonArray>(){
@Override
public void onResponse(Call<JsonArray> call, Response<JsonArray>response){
//code…
}
@Override
Public void onFailure(Call<JsonArray> call, Throwalbe t){
//code…
}
}
Retrofit 객체 retrofit 의 create()메서드와 미리 정해둔 GithubService Interface를 이용하여 실질적으로 사용할 Client Instance를 생성한다. 이렇게 생성된 클라이언트 객체를 이용하여 요청을 보내고 받아온 응답을 가지고 특정 작업을 하고나면 해당 Retrofit객체의 사용이 끝나게 된다.
위의 예제 코드에서 생성된 클라이언트 객체가 제공하는 enqueue()를 이용하여 요청을 처리하였고, 해당 메서드에 익명의 Callback Interface를 구현하였다.
Callback Interface는 onResponse와 onFailure method를 구현해줘야 하며, method의 명에서도 이미 알 수 있듯이,
onResponse()에서는 요청이 성공한 경우의 처리를 해주고, onFailure()에서는 요청이 실패한 경우의 처리를 해준다.
enqueue() method는 비동기 방식의 통신에 사용된다. 동기식 방식의 경우 execute() method를 사용하면 된다.
'Android' 카테고리의 다른 글
Gson (0) | 2021.09.03 |
---|---|
DataBinding (0) | 2021.09.03 |
콜백(Callback)과 리스너(Listener) (0) | 2021.09.03 |
Fragment 사용방법 (0) | 2021.09.03 |
Fragment (0) | 2021.09.03 |