안녕하세요 ^^

앞서 임시 지역 변수 사용에 따른 성능 측정 결과를 정리한 글에 이어

한 가지 "구체적인 사용 요령"을 추가로 올립니다.


변수의 scope를 최소화 하자 !


저는 이전에 C 개발이 주특기(?)였습니다.

C++도 꽤 하기는 했으나, 상당히 C 스타일의 C++에서 크게 벗어나질 못했습니다.

Java도 알고는 있었지만 거의 안 쓰다가 안드로이드 오면서 본격적으로 Java를 하게 되었습니다.


저와 같은 분들의 특징은 지역 변수 선언을 함수 초반에 몰아 넣는 (나쁜) 습관이 있다는 것입니다.


예를 들어 보겠습니다.


void testFunc() {

    int left = getLeft();

    int right = getRight();


    // left를 써서 계산하는 코드 (이 부분에서 right는 전혀 쓰지 않음)

    ...

    ...


    // right를 써서 계산하는 코드

    ...

    ...

}


이런 코드는 가독성이 떨어지므로 절대 좋은 습관이 아닙니다.


left를 써서 계산하는 코드 부분이 상당히 복잡하다고 합시다.

그러면, right가 중간에 쓰였는지 안쓰였는지,

right값에 새로운 값을 써서 중간에 값이 바뀌지는 않았는지...

한눈에 파악이 안됩니다.


대신 아래와 같이 쓰면...


void testFunc() {

    int left = getLeft();

    // left를 써서 계산하는 코드 (이 부분에서 right는 전혀 쓰지 않음)

    ...

    ...


    int right = getRight();

   // right를 써서 계산하는 코드

    ...

    ...

}


left를 써서 계산하는 코드 부분에서 right값을 사용하지도 바꾸지도 않았다는 사실이 분명해집니다.


선언을 초반에 몰아 쓴다고 해서 조금도 더 빨라지지 않습니다.

지역 변수는 사용 직전에 선언하고 초기화 합시다.



심지어 이런 예도 있습니다.


int value;

int size = mList.size();

for (int i = 0; i < size; i++) {

    value = mList.get(i);


    // value를 써서 계산하는 코드

    ...

    ...

}


// 이 뒤에도 코드가 계속되지만 value 변수는 더 이상 사용하지 않음

...

...


이것 보다는 아래와 같은 코드가 조금 더 좋습니다.


int size = mList.size();

for (int i = 0; i < size; i++) {

    int value = mList.get(i);


    // value를 써서 계산하는 코드

    ...

    ...

}


// 이 뒤에도 코드가 계속되지만 value 변수는 더 이상 사용하지 않음

...

...



이번에는 for 루프 바깥에 변수를 선언하지 않고, 루프 안에서 value를 선언했습니다.

value는 for 루프 안에서만 사용되는 변수기 때문에 scope를 최소화 하기 위해서 이렇게 했습니다.


처음 코드는 for 루프가 끝난 후

뒤에 이어지는 코드에서는 value가 더 이상 필요하지 않지만

변수는 계속해서 유효하기 때문에 별로 좋지 않습니다.


문제는...

"저렇게 변수를 자주 선언하면 더 느려지지 않나요? ㅠㅡㅠ" 입니다.

느낌상 정말 엄청 느려질 것 같습니다만...


사실 루프 내에서 변수를 선언한다고 해서 더 느려지지는 않습니다.

걱정하지 않으셔도 된다고 합니다.


이에 대한 자세한 설명은 아래 글을 참고하시기 바랍니다. :)


http://benelog.springnote.com/pages/386996


정말 유익한 글이니 한 번 쯤 시간을 내어 꼭 읽어보시기 바랍니다.