원글 링크 - http://m.blog.daum.net/creazier/15310035#
Retrofit은 Square에서 만든 쉽고
간단한 HTTP REST 인터페이스입니다.
Android에서 HTTP 요청을 하려면
복잡한 과정을 거쳐야 할 뿐만 아니라 URL을 문자열로 지정하여 요청하기 때문에 지속적인 관리를 하기 어렵기 때문에 처음 Android
어플리케이션을 만드는 사람들에게 불편하게 느껴집니다.
Sqaure Retrofit은 Android HTTP 요청을 라이브러리화 하여 사용자가 메소드 호출을 통해 HTTP 요청을 수행할 수 있게 해줍니다. 다음은 구글 Places에 Retrofit을 사용하여 POI 정보를 받아온 예제입니다.
public interface GooglePlacesService {
public static final String ROOT = "https://maps.googleapis.com";
public static final String POI_SEARCH_QUERY =
"/maps/api/place/textsearch/json?" +
"language=ko&sensor=true&key=YOUR_KEY";
@GET(POI_SEARCH_QUERY)
Object textSearch(@Query("query") String query);
@GET(POI_SEARCH_QUERY)
void textSearchAsync(
@Query("query") String query,
Callback<Object> callback
);
Retrofit은 요청하려는 대상의 정보를
담은 자바 interface를 선언하여 HTTP 요청 정보를 메소드로
선언합니다. 위와 같이 만든
interface는 구글 Places를 사용하여 POI 검색을 수행하는 GET요청을 만듭니다.
첫번째 메소드
textSearch
는 POI검색을 동기화 통신으로 수행합니다.
동기화 통신이기 때문에
위 메소드를 수행하면 HTTP 응답이 올 때까지 어플리케이션이 동작을 멈춥니다.
Android는 HTTP
요청으로 인한 어플리케이션 중지를 피하기 위해
AsyncTask
를 사용할 것을
권장/강제 합니다.
두번째 메소드
textSearchAsync
는 비동기 통신으로 POI검색을 수행합니다.
Callback<Object>
callback
은 비동기 통신이 종료된 후 실행 될 콜백
함수를 담은 리스너 객체입니다.
다음 코드를 수행하여 Retrofit을 사용한 HTTP 요청을 만들어보겠습니다.
public class SomeActivity extends Activity {
...
private GooglePlacesService mService;
public void foo()
{
/* RestAdapter는 특정된 HOST에 대한 RESTful 서비스를 준비합니다 */
RestAdapter restAdapter = new RestAdapter.Builder()
.setServer(GooglePlacesAPI.ROOT)
.build();
/* 미리 구현한 interface를 Retrofit 어댑터로 객체화 합니다 */
mService = restAdapter
.create(GooglePlacesAPI.class);
/* 검색 쿼리를 만들어 POI 검색을 수행합니다 */
String query = "query to execute";
new poiTask().doSearch(query);
}
/* Blocking HTTP 요청을 실행하기 위한 AsyncTask 클래스를 구현합니다 */
private class SearchTask extends AsyncTask<String, Void, Object>
{
@Override
protected Object doInBackground(String ... params) {
Object ret = mService.textSearch(params[0]);
return ret;
}
@Override
protected void onPostExecute(Object result) {
/* do something with your result */
}
}}
위와 같은 동기화 메소드의 경우 AsyncTask를 상속한 클래스를 만들어 HTTP 요청에 대한 응답을
처리하게 합니다. 이렇게 만든 AsyncTask 객체는 여러 클래스에서 손쉽게 불러와 호출할 수 있으며
코드 재사용이 상대적으로 쉬워 같은 요청에 대하여 동일한 후처리를 하는 API에 적합합니다.
다음은 비동기 메소드를 호출하여 HTTP 요청을 수행하는 예제입니다.
public class
SomeActivity extends Activity { |
비동기 메소드의 경우 HTTP 요청을 만든 클래스에서 함수를 직접 실행하기 때문에 요청을 만든 상황과
조건에 따라 다른 후처리를 할 수 있다는 점에서 유용합니다. 물론
AsyncTask
를 사용하여 코드 재사용을 할 수 있는 것처럼Callback
리스너를 별도의 클래스로 구현하여
필요할 때마다 호출할 수 있습니다.
그리고 일반적인 웹 어플리케이션을 만들 때도 좋고, 안드로이드 어플리케이션에서도 사용 가능합니다.
[기존 AsyncTask를 사용할 경우와 Volley 그리고 Retrofit 라이브러리 성능 측정 결과]
출처 : http://instructure.github.io/blog/2013/12/09/volley-vs-retrofit/
Retrofit 라이브러리는 예전부터 즐겨 사용되어왔던 라이브러리로 자세한 장단점은
http://blog.daum.net/creazier/15309920 에 두번째 포스트를 참조하세요.
'공부하는 하스씨 > 안드로이드' 카테고리의 다른 글
[펌] [번역] 요즘 활용하는 Android 오픈소스 라이브러리 모음 (0) | 2015.09.11 |
---|---|
[펌] Android의 HTTP 클라이언트 라이브러리 (0) | 2015.09.11 |
[펌] [안드로이드]유용한 라이브러리 - Retrofit(REST API 통신) (0) | 2015.09.11 |
[펌] 모든 안드로이드 개발자가 알아야할 5대 안드로이드 라이브러리. (0) | 2015.09.11 |
안드로이드용 그래프, 차트 그리기 라이브러리들. (0) | 2015.07.29 |