제공 :
한빛 네트워크
저자 : zigurd
역자 : 임영섭
원문 :
Ten Tips for Android Application Development
초보자를 위한 팁
1. SQL을 배워서 데이터 모델을 데이터베이스에 밀어 넣기
안드로이드는 뛰어난 영속시스템을 갖고 있다. 이 시스템을 이용해서 애플리케이션이 실패나 종료시 좀 더 신뢰성을 가질 수 있고, 중지하고 다시 시작하는 것을 좀 더 효율적으로 할 수 있다. 안드로이드의
SQLite에 기초한 저장 시스템은 사용자 인터페이스 클래스와 잘 결합되어 있다.
안드로이드는 사용자 인터페이스가 데이터베이스 쿼리 결과와 직접 연결이 가능한 Cursor, Adapter, View 클래스에서 옵저버 패턴을 지원한다. 이 기능을 이용하면 안드로이드는 애플리케이션을 멈추고 싶은 경우 확실히 저장할 데이터가 거의 없기 때문에 아무 때나 배터리가 나갈 수 있는 모바일 장치에서 보다 높은 신뢰성을 갖는다.
안드로이드 프레임워크에서 데이터베이스 클래스가 유지하는 캐시 기능은 전체 데이터 모델을 읽어서 이것을 메모리에 있는 객체에 담아 두는 것보다는 더 효율적이다. 그러나 데이터 모델을 설계하는 안드로이드 방식의 이점을 최대한 살리기 위해서는 SQL을 어느 정도 알 필요가 있다.
2. XML을 배워라
레이아웃이나 다른 리소스를 정의하기 위해 사용하는 비주얼 편집기를 다루면서 XML에 대해서 많이 알 필요는 없다. 이론적으로는 손으로 직접 XML을 편집할 일이 없다. 하지만 이런 툴은 완전하지 않기 때문에 안드로이드의 XML 그리고 XML 스키마 사용법을 알면 알수록 안드로이드 애플리케이션에서 발생할 수 있는 문제점을 고치는 것이 쉬을 뿐만 아니라 안드로이드 애플리케이션을 최대한 효과적으로 개발하는데 XML을 훨씬 편하게 사용할 것이다.
3. 이클립스 특징과 약점 배우기
자바는 보다 많은 단어로 작성해야 하는 언어이고 코드 완성이나 Javadoc 팝업, 진보된 리팩토링이 없다면 자바는 동적인 언어에 비교해 뒤쳐진 언어일 수 있다. 다른 말로 바꾸어 말하면 이클립스 특징을 사용하지 않는 자바는 생산적이지 않다.
이클립스는 특히나 초보자에게는 학습효과가 뛰어난 툴이다. 이러한 이클립스의 크고 강력한, 때로는 혼란스러운 IDE에 익숙해지는 것이 안드로이드 애플리케이션 개발 생산성을 높이는 중요한 부분이다.
이클립스의 문서 페이지내에 이클립스 개념을 다루고 있는 페이지를 읽는 것이 좋은 출발점이다. 이런 개념을 초기에 익혀두지 않으면 이클립스 메뉴나 다른 문서는 종잡을 수 없는 말들로 가득 차 보인다. 그러므로 자바 개발 섹션에 있는
기본 튜토리얼을 먼저 수행해 보라.
4. 자동화된 테스트 기능을 이용하라
애플리케이션을 스트레스 테스트하려면
Monkey를 사용하라. 이것은 랜덤한 입력을 가장한 일련의 이벤트를 생성해서 애플리케이션이 갑자기 죽거나 응답이 부족한 경우를 보고한다.
adb와
InstrumentationTestRunner를 사용해서 이클립스에서 수행 가능한 단위테스트를 작성하는데
Instrumentation 프레임워크와
JUnit를 사용하라.
5. 안드로이드 애플리케이션 모임에 적극적인 회원이 되라
애플리케이션과 서비스 생명주기를 효과적으로 익히고 사용하라. 안드로이드 시스템이 애플리케이션을 효율적으로 중단하고 다시 시작할 수 있도록 개발하라.
애플리케이션의 생명주기를 사소하게 취급하는 많은 실행 환경과는 다르게 안드로이드 실행 환경은 리소스를 적게 소비하도록 프로세스를 자주 중단하거나 종료하고 사용자가 애플리케이션으로 다시 돌아오면 다시 시작할 준비를 하고 있다.
안드로이드는 애플리케이션이 화면에 보이거나 다른 애플리케이션에 의해 가려질 때 발생하는 이벤트에 반응하는 애플리케이션 생명주기 메소드를 오버라이드하고 안드로이드가 애플리케이션을 관리하는 방식대로 애플리케이션이 반응하기를 바란다. 이러한 메소드 오버라이드에 새로운 코드를 추가하는 일로 마무리 하지 않기 위해서라도 애플리케이션 개발 초기에 이런 코드를 애플리케이션에 반영하라. 안드로이드 애플리케이션 생명주기가 어떻게 작동하는지 보려면 애플리케이션 생명주기 메소드에 검사점을 설정할 수 있는 디버거를 사용하라
전문가를 위한 팁
1. 정적 분석기를 이용하라
자바는 의미있는 컴파일러 경고, 정적 분석에 기초한 경고나 충고에 적합하다. 애플리케이션이 개발되기 전에 가능성있는 모든 버그를 제거하여 2-star 등급 대신에 4-tar 사용자 등급에 가까워질 수 있다. 컴파일러 경고,
FindBugs를 사용하라. 그리고
PMD처럼 이클립스 플러그인으로 구현되어 가장 많은 문제점을 찾아내고 잘못된 긍정을 가장 적게 발생하는 정적 분석기를 시험하라
2. 사용하라 그리고 사용되게 하라
다른 애플리케이션에서 기능을 빌려오기 위해서
Intent 객체와
StartActivity(그리고 관련된 메소드) 를 사용하라. 그리고 애플리케이션이
intent filter 매치에 반응하여 다른 애플리케이션에 기능을 제공하도록 작성하라 또한 애플리케이션은
ContentProvider 시스템과
원격 메소드 인터페이스를 통해서 데이터를 공유할 수 있다.
3. 큰 애플리케이션을 분할하라
만약에 당신이 큰 애플리케이션을 작성한다면 그것을 작은 단위의 애플리케이션 묶음과 서비스로 분할하는 것을 생각해 보라 애플리케이션이 작으면 작을수록 훨씬 빨리 로드할 수 있고 훨씬 적게 리소스를 사용한다. 애플리케이션 묶음, 콘텐트 제공자, 서비스를 만드는 것은 "사용하라 그리고 사용되게 하라" 팁으로 표현했던 것처럼 당신의 코드가 다른 애플리케이션에게 좀 더 도움이 되도록 한다.
4. 전력을 적게 소비하도록 설계하라
가령 10분마다 서버를 폴링하는 것처럼 PC에서 양호한 기능은 휴대폰에서는 배터리 수명을 반 또는 그 이상으로 떨어뜨린다. 사용자가 애플리케이션을 포어그라운드로 수행하거나 액션이 필요한 어떤 외부 정보가 도착할 때까지는 애플리케이션을 가능한 한 적게 일을 하도록 코딩하라.
배터리를 사용하는 애플리케이션 그리고 다른 시스템 함수를 찾으려면 "Settings" 에서 "About phone" 메뉴에서 "Battery use" 항목을 사용하라
5. 라이브러리 함수를 엑세스하려면 NDK를 사용하라
안드로이드 NDK는 Native 컴파일 코드를 사용할 수 있도록 안드로이드 SDK와 같이 제공되는 선택적인 툴킷이다. 이미 존재하여 유용한 기능을 제공하는 C 나 C++ 라이브러리를 함께 이용하려면 NDK를 사용하라. CPU를 많이 사용하는 계산작업을 휴대폰에서 해야 한다면 C 또는 C++로 코딩하고 이 코드를
자바 Native 인터페이스(JNI)를 사용해서 자바로부터 호출하기 위해서 NDK 툴을 사용하라.
좋은 유저 인터페이스를 위한 팁
위의 10가지 팁과 더불어 여기에는 안드로이드에 훨씬 좋은 유저 경험을 만들 수 있는 몇 가지 팁이 있다.
1. 특정 디멘젼 정보에 의존하지 마라
스크린 크기와 스크린 해상도에 관한 어느 것도 가정하지 마라. 스크린 크기가 변하면 적응할 수 있도록 레이아웃을 확정하라. 해상도가 달라지면 스크린 디멘전이 훨씬 커지거나 또는 훨씬 작아질 수 있는 픽셀 단위보다는 해상도와 무관한 단위로 디멘전을 확정하라. 온 스크린 키보드가 보이든 안보이든 애플리케이션이 수평 그리고 수직 방향에 동일하게 잘 작동하는지 확인하라. 각기 다른 스크린 크기와 해상도에서 테스트할 수 있는 에뮬레이터를 구성하라
애플리케이션이 크기를 조정하면 좋게 보이지 않는 비트맵 그래픽스를 포함하면 (예: 매우 상세한 게임 요정) 다른 스크린 해상도를 위해서 작은, 중간, 큰 변수를 포함하고 애플리케이션이 특정한 스크린 크기가 필요하면 안드로이드 시스템에 이러한 요구사항을 알리기 위해서 manifest attributes를 사용하라
2. 직접 조작이 가능하도록 하라
직접 조작은 사용자가 보이는 대로 직관적인 방법으로 직접 사용자가 작업을 수행할 수 있는 기능이다. 만약에 사용자가 스크린의 어떤 점으로 객체를 드래그해서 액션을 일으킨다면 또는 유저가 객체를 길게 눌렀을 때 객체의 컨텍스트에 메뉴가 나타난다면 바로 그것이 직접 조작이다.
직접 조작의 반대는 엄격한 일련의 수행 또는 유저가 다이얼로그를 계층적으로 따라 내려가면서 사용자가 일련의 수행을 완료할 때까지 멈추는 직렬 모델이다.
당신이라면 어느 것을 사용하겠는가? 직접 조작이 가능한 곳이라면 직접 조작을 만들어 사용자의 편의성을 높여라. 이것은 작은 스크린에서는 도전적일 수 있다. 하지만 보상은 상응하는 만큼 크다. 직접 조작은 유저 인터페이스를 간단하고 우호적으로 유지시켜 주고 사용자가 애플리케이션에서 방문해야 하는 다른 스크린의 수를 최소화해 주는 정말 강력한 툴이다.
3. 계층 구조를 피하라
중앙 위치, 또는 "home" 스크린, 또는 고정된 시작점 주위에 애플리케이션을 설계하지 마라. 모바일 장치 사용자는 원하는 기능에 빨리 접근하기를 원한다. 사용자는 메뉴 계층을 따라 위아래로 움직이는 것을 참지 못한다. 더 나아가서 intent 인터페이스를 통해서 다른 애플리케이션이 쉽게 부를 수 있는, 그 자체만으로 작동이 가능한 액티비티를 제공하기 원한다. 각 액티비티를 독립적으로 사용 가능하도록 하고 모든 다른 액티비티에 대한 액세스를 허용하는 메뉴를 그 안에 포함하라. 요컨대 당신의 애플리케이션을 끊김없는 안드로이드 유저 경험 안으로 불러 들여라.
4. 초기에 국제화하라
이것은 게을러져서 코드에 문자열을 끼워 넣는 일을 막아 준다. 안드로이드는 26 지역화를 지원하고 앞으로는 보다 많은
국제화를 제공할 것이다. 지금 문자열을 코드 바깥(property 파일)으로 빼고 나중에 생길 아픔을 절약하라.