구글에서 말하는 안드로이드 앱 개발 성능 개선 팁: 꿈꾸는 개발자의 로그

유념해 두면 좋은 습관인데...
가뭄에 콩 나듯 하는 코딩인지라 외우지는 못하고...
그래도 기록만...

다른 블로그(구글에서 말하는 안드로이드 앱 개발 성능 개선 팁: 꿈꾸는 개발자의 로그)에 정리된 내용을 먼저 봤는데, 다시 보니까 http://developer.android.com/training/articles/perf-tips.html에 있는 내용을 한글로 간단히 정리한 거다.
그래도 유용하기는 마찬가지...


  1. 불필요한 개체는 생성하지 말자...
    1. String 대신 StringBuffer
    2. Interger 같은 클래스 대신 int
    3. Multi-dimensional array는 나눠서
  2. Virtual 대신 Static...
  3. 상수는 Static Final로 정의하자...
  4. 클래스 내부에서 Getters/Setters는 사용하지 말자...
    1. Android에서는 호출하는 데 부담된다...
  5. Iterable 인터페이스가 구현된 컬렉션에는 개선된 For Loop Syntax를 쓰자...
      1. static class Foo { int mSplat; }
      2. Foo[] mArray = ...
      3. public void two() { int sum = 0; for (Foo a : mArray) { sum += a.mSplat; } }
    1. 단, ArrayList에 대해서는 그냥 풀어서 루프 돌리는 게 낫다.
  6. Private inner class에 private 접근 대신 package로 접근하자...
    1. 바로 와 닿지 않았던 내용인데, '꿈꾸는 개발자의 로그'의 설명을 참고...
    2. "자바에서 inner class는 감싸고 있는 클래스의 private 변수를 접근 할수 있는 경우가 있다. 그런데 vm에서는 애부 클래스를 감싸고 있는 클래스는 다른 클래스로 인식 한다. 그래서 컴파일러는 감싸고 있는 클래스의 private 변수에 접근 할 수 있는 메서드를 자동으로 생성하게 된다. 따라서 변수에 직접 불가능하기때문에 getter/setter을 사용하는 것처럼 느려진다."
  7. Floating 연산하지 말자...
    1. 당연한 이야기...
    2. double과 float 연산 시간은 동일하게 걸리지만, double이 두 배 메모리를 잡아먹는다는 건 기억해 둘 것.
  8. 라이브러리를 알고 쓰자...
    1. 가능한한 라이브러리에서 제공하는 API를 쓰는 게 낫다. 자신의 코드가 월등히 낫다는 보장이 없다면...
    2. System.arraycopy() 같은 경우, 수작업으로 복사하는 것보다 9배 정도 빠르단다.
  9. Native method는 조심해서 쓰자...
    1. 전환하는데도 비용이 들고, 자원 정리도 힘들고, 아키텍처마다 컴파일을 따로 해야되고...
    2. Native 코드가 이미 있어서 단순히 포팅하고자 할 때 유용하다. 단순한 속도 향상을 위해서는 권장하지 않는다.
    3. Native 코드 사용을 위해서는 JNI 팁을 살펴볼 것.
  10. 성능 관련한 미신...
    1. JIT이 없는 경우, method 호출시 인터페이스를 통하지 않고 정확한 클래스 타입을 명시하는 게 조금 더 빠르고, 반복 참조하는 변수들은 cache 효과가 크다.
    2. 그렇지만... JIT을 사용한다면 굳이 신경쓰지 않아도 되는 사항들이다.
  11. 항상 측정하자...
    1. 현재의 성능을 측정해 놔야 수정한 결과와 비교할 수 있다.
    2. Caliper microbenchmarking framework for Java를 이용하자. 강력히 권장!

댓글

이 블로그의 인기 게시물

환경개선부담금

[DevTip] Windows에서 tail 쓰기...