[JCO] 반복적인 작업이 싫은 안드로이드 개발자에게

2012.02.18(토) 코엑스에서 제12회 자바개발자컨퍼런스에서 “반복적인 작업이 싫은 안드로이드 개발자에게” 라는 제목으로 발표를 진행합니다.

갑을병정 산업구조에서 갑돌이의 잦은 요구사항 변경 통보를 받아보셨을 겁니다. 사람들에게 받은 스트레스를 풀려고 ‘그래! 난 개발자닌깐’ 하고 자리에 앉아서 코드를 짜는데 반복적인 작업을 하다보면 ‘내가 이걸 왜 하고 있나’ 라는 생각까지 들기도 합니다.

안드로이드 작업을 하다보면 다음과 같은 반복적인 작업을 하는 것을 느꼈을 겁니다.

1.UI 매핑 (findViewById)

TextView subject = (TextView) findViewById(R.id.subject);
TextView writer = (TextView) findViewById(R.id.writer);
TextView date = (TextView) findViewById(R.id.date);
TextView hit = (TextView) findViewById(R.id.hit);

2.파라미터 처리

String id = intent.getStringExtra("id");
String name = intent.getStringExtra(“name");
String nickname = intent.getStringExtra(“nickname");
int sex = intent.getIntExtra(“sex“,0);
Object object = intent.getExtras().get("object");

3.비동기처리 (Async)

private class DownloadFilesTask extends AsyncTask {
  protected Long doInBackground(URL... urls) {
  int count = urls.length;
  long totalSize = 0;
  for (int i = 0; i < count; i++) {
    totalSize += Downloader.downloadFile(urls[i]);
    publishProgress((int) ((i / (float) count) * 100));
  }
  return totalSize;
}
protected void onProgressUpdate(Integer... progress) {

4.REST 통신 (Http)

private InputStream download(String url) {
  HttpURLConnection con = null;
  URL url;
  InputStream is=null;
  try {
    url = new URL(url);
    con = (HttpURLConnection) url.openConnection();
    con.setReadTimeout(10000 /* milliseconds */);
    con.setConnectTimeout(15000 /* milliseconds */);
    con.setRequestMethod("GET");
    con.setDoInput(true);

위와 같은 반복적인 보일러(Boiler)코드를 줄일 수 있는 오픈소스를 소개하고자 합니다.

1. RoboGuice – http://roboguice.googlecode.com/
2. AndroidAnnotation – https://github.com/excilys/androidannotations

2가지 오픈소스를 사용하면 다음과 같은 코드로 변경이 됩니다. 물론, 프레임웍 혹은 라이브러리의 특성상 장단점이 있으니 프로젝트에 맞게끔 확인하고 사용하셔야겠죠?!😀

//UI 매핑
@ViewById TextView subject;
@ViewById TextView write;
@ViewById TextView date
@ViewById TextView hit;

// 파라미터 처리
@Extra(“id") String id;
@Extra(“name") String name;
@Extra(“nickname") String nickname;
@Extra(“sex") int sex;
@Extra(“object") Object object;

// 비동기 작업
@Background
void backgroudJob() {
  MovieContents movieContents = daumMovieService.getMovieContents("love");
  String result = movieContents.getQuery();
  setData(result);
}

@UiThread
void setData(String data) {
  textView.setText(data);
}

//REST API
@Rest
public interface DaumMovieService {
  @Get("http://apis.daum.net/contents/movie?apikey=DAUM_CONTENTS_DEMO_APIKEY&output=xml&q={query}")
  public MovieContents getMovieContents(String query);
}

발표자료와 함께 튜토리얼 처럼 사용할 수 있는 스크린캐스트를 함께 공유합니다.

감사합니다.😀

1) RoboGuice 설치 및 샘플프로젝트 작성

2) RoboGuice 커스텀 클래스 Inject

3) AndroidAnnotations 설치 및 샘플

4) AndroidAnnotations 비동기처리

5) AndroidAnnotations + SpringAndroid를 사용한 REST API

※ 위 오픈소스를 만드는 기술들…
Java Reflection, Annotation
리플렉션(Reflection)을 활용한 안드로이드 위젯 매핑(Mapping) 간소화 하기 (1)
리플렉션(Reflection)을 활용한 안드로이드 위젯 매핑(Mapping) 간소화 하기 (2)

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중