COCSOS - guitar, computer, etc
181002 Retrofit2 설명, 차이와 사용법 본문
글을 작성하던 중 계획이 바뀌었다.
서버에서 받아올 필요가 생김.
이래서 기획이 중요한건데... 기획만 하는 사람들은 이걸 모르겠지 휴
아무튼 원래대로 Retrofit2 + RxAndroid2를 공부하기로 한다.
Retrofit2?
REST api에 특화된 CRUD 방식의 서버연결을 편하게 구현할 수 있는 라이브러리.
이며, 장점은
http://meansoup.blogspot.com/2017/05/retrofit.html

에 따르면
1. annotation 방식으로 구현이 쉽다.
2. 성능좋음
3. 가독성, 유지보수, 재사용성 좋음.
AsyncTask에 비해서 1. 미리 interface를 정의해놓고, 2. 객체를 생성한뒤, 3. 연결하면 끝.
ex)
//ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ 인터페이스 정의
public interface GitHubService {
@GET("/users/{user}/repos")
Call<List<Repo>> listRepos(@Path("user") String user); //함수 정의
}
//ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ 객체 생성
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com")
.build();
GitHubService service = retrofit.create(GitHubService.class);
//ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ 서버 연결
Call<List<Repo>> repos = service.listRepos("octocat");
GET에는 body를 추가할 수 없다고 되어있다 : https://tosslab.github.io/android/2016/04/16/migration-to-retrofit2.html
ㅠㅠ delete는 get과 같았으나 따로 annotation을 이용해서 사용가능한가보다.
일단 user-permission 인터넷 필요.
gradle의 적용에는 다음을 참고했다
https://dev-juyoung.github.io/2017/11/10/android-retrofit-basic/

compile "com.squareup.retrofit2:retrofit:$rootProject.retrofitVersion"
compile "com.squareup.retrofit2:converter-gson:$rootProject.retrofitVersion"
compile "com.squareup.okhttp3:okhttp:$rootProject.okhttpVersion"
왜 retrofit2하나만 추가하는데 라이브러리를 세줄이나 추가를 하냐면 DI(의존성 주입)를 위해서.
이전에 써진 포스트가 있으므로 용어는 패스
근데 okHttp도, retrofit2도 연결하는 라이브러리인데 왜 가져오라그러지?
하고 찾아봤더니
okhttp는 low-level 처리를 하고...
retrofit2는 high-level 에 적합하며 okhttp와 결합도가 높아서 많이 의존하여 내부에서 이미 ohHttp를 사용한다는 듯하다.
내부에서 사용하면 안가져와도 되는거 아니냐?
고 한다면, 안가져와도 실행은 된다고한다.
그러나 okHttp는 http통신을 하고, retrofit은 json등의 데이터 위주의 api통신을 하기때문에
홈페이지를 로딩하든가 하는 부분은 okHttp를 사용해서 하는 것 같다.
Retrofit 은 API 인터페이스를 호출 가능한 객체로 바꿔줍니다.
위엔 세줄을 추가했지만 나는... 일단 두줄만 추가해야겠다ㅎ
이곳도 설명이 잘 되어있음
http://devflow.github.io/retrofit-kr/

아하, gradle에 추가한 두번째 gson 등의 변환기를 컨버터라고 하고, GSON, jackson,moshi,simple XML 등이 있구나.
단, deserialization(역직렬화)만 가능하니까 객체를 string?글줄로 변환(직렬화)하려면 gson.toJson()등으로 직접 해줘야하는듯.
컨버팅해서 받아오려면 retrofit 객체 생성시 .build() 이전에
.addConverterFactory(GsonConverterFactory.create())

'Computer > android' 카테고리의 다른 글
220405 애니메이션 훑기 (0) | 2022.04.05 |
---|---|
191205 App Widget 정리 - 1 (0) | 2019.12.05 |
181004 RxJava2+Retrofit2+lambda정리 (0) | 2018.10.05 |