일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- skril
- xml
- 휴대폰 직접만들기
- adv cash
- 돌리는 센서
- 안드로이드
- LTE 통신
- 로터리 엔코더
- 해외 발행 카드
- HackDay
- 로터리 포지션
- 아두이노
- 다중 화폐 카드
- 비트코인
- 이더리움
- ewallet
- money polo
- 오케이페이
- 멀티커런시 카드
- ccxt
- expert beginner
- 아식차트
- LTE 통신 칩
- e 월렛
- 아두이노 시계
- 스마트폰 직접만들기
- moneypolo
- ok pay
- e wallet
- 선불 카드
- Today
- Total
LAINO의 개발노트
자바,안드로이드 Retrofit2 사용방법 / 깔끔하고 이쁜 비동기 처리 비즈니스 로직 구성하기 본문
오늘은 나름 선진 문물이라고 느꼈던 자바8의 이것저것을 이용하여 엄청 깔끔한 비동기 처리 로직을 구현하는 Retrofit을 통한 네트워킹 처리를 구현해보고자 한다.
일단 먼저 Gradle 부터 세팅해보자 오늘의 주인공인 레트로핏과 그의 하수인 Gson, 비동기처리 로직을 구성하는 핵심인 킹 어뎁터 Guava다.
1 2 3 4 5 6 | compile 'com.google.code.gson:gson:2.8.2' compile 'com.squareup.retrofit2:retrofit:2.4.0' compile 'com.squareup.retrofit2:converter-gson:2.4.0' compile 'com.squareup.retrofit2:converter-guava:2.4.0' compile 'com.squareup.retrofit2:adapter-guava:2.4.0' | cs |
일단 로직의 구성부터 설명해야할것같다. 4개 클래스로 깔끔하게 구성해보자.
- 인터페이스
- 레트로핏 api 인터페이스
- 네트워킹 처리
- 레트로핏 팩토리
- 레트로핏 리턴(?)
- 자바 오브젝트
- POJO
1 2 3 4 5 | public static List<ComulApiModel> failed() { List<ComulApiModel> data = new ArrayList<>(); data.add(new ComulApiModel("error!", "", "", "", "", "")); return data; } | cs |
1 2 3 4 | public interface ComulApiInterface { @GET("news.php") ListenableFuture<List<ComulApiModel>>getXml(); } | cs |
ListenableFuture가 뭐하는놈이냐면 http://haviyj.tistory.com/31 이곳을 참조해도 좋을것 같다. 비동기처리를 말끔하게 끝내주는 우리의 친구다. 사실 남에게 설명할 만큼 내가 안다라고 하는놈은 아니여서 나중에 날잡고 공부해서 이놈에 대한 글을 써보는 기회를 가져야할듯 하다. 여튼 좋은 친구다. 나의 블로그를 구독하시는분들께서 설명해주실수 있는 분이 계시면 참 좋을것같다.
3. 레트로핏 객체를 열심히 만들기
레트로핏 객체는 생성할때마다 자원을 엄청소모한다고 들었다. 따라서 단일객체를 생성해서 싱글톤으로 접근하여 불필요한 잉여객체의 생성을 막고 깔끔하게 숨겨줄 필요가 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | public class RetrofitFactory { public static final String URL = "https://king.king/king/"; private static ComulApiInterface comulAPI = new Retrofit.Builder() .baseUrl(URL) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(GuavaCallAdapterFactory.create()) .addConverterFactory(GuavaOptionalConverterFactory.create()) .build() .create(ComulApiInterface.class); private RetrofitFactory() { } public static ComulApiInterface getComulAPI() { return comulAPI; } } | cs |
여기서 구아바를 열심히 물려준다.
4. 인터페이스에 있는 메소드 구현해주기
이제 실질적인 파싱 로직을 구성할때이다. 레트로핏 리턴(?) 이라는 이름을 지어줬는데 다른 더 좋은 이름이 있다면 공유해주시면 감사히 사용 하겠습니다 :)
1 2 3 4 5 6 7 8 9 10 11 | public class RetrofitReturn { public static List<ComulApiModel> getXml() { try { return RetrofitFactory.getComulAPI() .getXml() .get(); } catch (Exception e) { return ComulApiModel.failed(); } } } | cs |
여기서 네트워킹이 실패했을때 예외처리를 해주는데 이때 아까 POJO에서 구현했던 failed() 메thㅗ드를 통하여서 에러가 열심히 났다는걸 알려주자. 빈객체던 뭐던 내가 알아보고 구현하고자 하는 목표에 맞춰서 에러객체를 POJO에서 구성하면 되겠다.
5. 이쁜 사용
이제 다구현했다. 그냥 쓰면된다.
실제 구현체에서 사용되는 로직
1 | List<ComulApiModel> kingNews = getXml(); | cs |
한줄 이상 긴말하지 않는다.
나름 친구가 알려준 이쁜 패턴들을 적용해 보았습니다.
한줄 이상 긴말하지 않는다고 위에 말해두었으니, 궁금한 부분이 있으시거나 문의가 있으신경우 댓글이나 지체없이 훅훅 laino@laino.ml로 연락주시면 정말 감사할듯 합니다.