구글에서 말하는 안드로이드 앱 개발 성능 개선 팁

안드로이드 개발에 있어 성능개선을 위해 알고있으면 좋을것 같은 팁을 하나 소개 하겠다. 구글 안드로이드 개발자 사이트에있는 안드로이드 성능 개선을 위한 팁이다. (http://developer.android.com/training/articles/perf-tips.html) 그냥 무작정 사용하는것 보다 정확히 알고 사용한다면 조금이나마 성능을 개선하는데 도움이 될 것 같다. 

1. Avoid Creating Unnecessary Objects

필요 없는 객체 생성은 피하자. 

– String대신 StringBuffer를 Integer대신 int를 사용하는 것 처럼 작은것 부터 신경써서 개발을 하게 된다면 객체가 적게생성되며 이에 따른 GC도 적게 발생한다.

2. Prefer Static Over Virtual

static을 적절히 사용하자.

– 인스턴스 변수에 접근할 일이 없는 경우 static 메서드를 선언하여 호출 하는것이 15~20%의 성능을 개선할 수 있다. 

3. Use Static Final For Constants

상수에 static final을 사용하자.

– 변하지 않은 상수를 선언시 static final과 static로 선언할때 저장되고 참조되는 위치가 달라지며, static final이 접근 속도가 훨씬 빠르다. 

4. Avoid Internal Getters/Setters

내부에서는 getter/setter를 피하라.

– 인스턴스 변수에 직접 접근시 getter/setter를 사용하면 직접 전근하는것 보다 느려진다. JIT 컴파일러가 적용되지 않을경우 3배, 적용될경우 7배 정도 빨라진다.

5. Use Enhanced For Loop Syntax

개선된 루프를 사용해라.

– for 루프를 사용하는것 보다 for-each 루프를 사용하는 것이 성능상 더 유리하다.  하지만, ArratList는 전통적인 for루프를 사용하는것이 3배 더 빠르다. 

6. Consider Package Instead of Private Access with Private Inner Classes

private inner 클래스의 private 접근을 피하자.

– 자바에서 inner class는 감싸고 있는 클래스의 private 변수를 접근 할수 있는 경우가 있다. 그런데 vm에서는 애부 클래스를 감싸고 있는 클래스는 다른 클래스로 인식 한다. 그래서 컴파일러는 감싸고 있는 클래스의 private 변수에 접근 할 수 있는 메서드를 자동으로 생성하게 된다. 따라서 변수에 직접 불가능하기때문에 getter/setter을 사용하는것 처럼 느려진다.

7. Avoid Using Floating-Point

소수점 연산은 피하자.

– 안드로이드기기에서는 정수 연산보다 소수점 연산이 2배 느리다. 그리고, double이 float보다 2배의 저장 공간을 사용하다면 가능하면 float를 사용을 권한다.

8. Know and Use the Libraries

라이브러리를 알고 쓰자.

– 자신이 만든 코드가 최적화 된것일수도 있으나, API에서 제공하는 클래스와 메서드가 훨씬 빠를 수 있다. 예를 들어 달빅에 내장되어 있는 String.indexOf()나 관련 API들이 있다. 마찬가지로 System.arraycopy() 메소드는 루프를 사용하는것 보다 9배 이상 빠르다.  

9. Use Native Methods Carefully

Native 메서드는 유의해서 사용하자.

  • 네이티브 코드를 사용한다고 해서 반드시 효율적이지는 않다. 자바-네이티브 전환간에 발생하는 비용이나, 네이티브 코드의 최적화가 되지 않는 경우를 들 수 있다. 또한 실행 하고자하는 아키텍처에 대한 코드를 컴파일 해야한다. 

댓글 남기기