안녕하세요 선후 입니다^^
public void setAAA(){
for(int i =0; i < 10; i++){
}
}
이것과
public int i = 0;
public void setAAA(){
for( i = 0; i < 10; i++){
}
}
두개는 처리 속도에 차이가 있는지 궁금합니다^^

첫번째 방법은 로컬 변수이고 두번째 방법은 멤버 변수인데요
안드로이드에서는 멤버 변수에 접근할 때 비용이 듭니다.
따라서 멤버 변수로의 접근은 최소화하는 것이 좋습니다.
그리고 i++로 하는 것보다 ++i 로 하시는 것이 더 빠릅니다. 이건 ++ 연산자가 어떻게 돌아가는지 살펴 보시면 이해가 될 거예요.
또 한 가지 더 알려 드리면 자바에서는 내부 클래스에서 외부 클래스의 멤버 변수에 접근할 수가 있는데 이건 private 멤버 변수인 경우에도 접근할 수가 있죠. 하지만 안드로이드에서는 외부 클래스의 멤버 변수를 package only 즉 default라고도 하는... 아무 접근 제한자 없이 그냥 변수를 선언하는 방식으로 하는 것이 더 빠릅니다. 물론 클래스 캡슐화 측면에서는 별로 안 좋겠지만요.
일반적인 자바와 안드로이드에서의 자바는 성능 측면을 고려할 때 코딩 방식이 조금 다릅니다.
이펙티브 자바와 같은 책에서 얘기하는 변수 타입의 추상화(ArrayList 보다는 List로 변수 타입을 정하는 것이 확장성 측면에서 더 좋다는)
의 경우에도 안드로이드에서는 원래 객체의 타입, 즉 앞의 예에서는 ArrayList로 변수 타입을 잡은 것이 더 빠릅니다.
일반적인 자바와 안드로이드에서의 자바... 성능을 따진다면 다르게 작업하셔야 합니다.
제가 이제까지 본 책 중에는 "이펙티브 자바"라는 책이 가장 훌륭합니다. 일단 이걸 머리 속에 다 집어 넣은 다음... 안드로이드에서 달라지는 부분을 공부한다면 최고 성능의 개발을 하실 수 있을 거예요.
이펙티브 자바... 자바 컬렉션을 만들어 졸트상을 수상한 조슈아 블로치라는 사람이 쓴 책입니다. 자바를 만든 고슬링보다 자바를 더 잘 안다고 알려진... ^^ 자바를 공부하는 사람이라면 꼭 읽어봐야 하는 책이죠. 강추.
머리 아프게 도전해 보고 싶다면 "자바 퍼즐러"라는 책도 추천합니다.
꼭 읽어보세요. 강추입니다. ^^
생각난 김에 한 가지 더...
for 문 안의 내용이 인덱스 순서와 상관이 없는 경우
for(int i = 0; i < 100; ++i) 로 하시는 것보다 for(int i = 99; i >= 0; --i)로 하시는 것이 더 빠릅니다.
물론 배열이나 컬렉션을 훑는 경우 for(int i : array)와 같이 enhanced for loop으로 하시는 것이 가장 빠릅니다.
사실 엄청나게 많은 데이터를 훑는 경우가 아니면 그렇게까지 차이 나는 건 아닙니다.
2ms짜리를 속도 반으로 줄여도 1ms일테니까요.... 이게 중요한 곳이 아니라면요.
어떻게 하셔도 상관이 없지만 코딩 습관을 좋게 가지는 것이 여러모로 좋겠죠.
음... Application 입장에서 봤을 때,.. 사용자관점에서 이거든 저거든 거의 차이가 없어요.. 하위 Layer, 즉, 배포되는 android.jar 에 포함되어 있는 코덱이나 기타 코드들의 입장에서 보면 CPU 의 instruction 하나가 큰 영향을 미칠 수 있겠지만,.. Application 에서는 instruction 몇 백개 차이가 나도 별반 성능향상을 체감하기 힘들어요.
오히려,... 공동작업-여러명이 개발을 하는 경우, 다수의 사람들이 선택해서 사용하는 방법이 유지/보수 측면에서 더 안정적일 수 있어요. 이를 테면,... 대부분 i++, ++i 를 사용하지,.. i-- 를 사용하지는 않거든요..




유닛테스트를 해보면 되지 않을까 합니다.
둘의 차이는 변수의 바인딩 되는 시점과 어떤 영역으로 들어가느냐
힙 , 스택 ...
보통 읽기 편한 소스가 좋다 말하고 실수를 적게 하며 디버깅에 좋다고 하자나요..
둘의 차이가 미묘해 보이는데 일반적인 경우라면 위에 방법을 선택하는게 옳아 보이네요..