[이펙티브 자바] 아이템 57. 지역변수의 범위를 최소화하라

지역변수의 유효 범위를 최소화하면 가독성과 유지보수성이 좋아지고 오류 가능성이 낮아진다.
지역변수의 범위를 줄이는 가장 강력한 기법은 처음 쓰일 때 선언하기이다.
실제 사용하는 블록 바깥에 선언한 변수는 그 블록이 끝난 뒤에도 살아있따.

거의 모든 지역 변수는 선언과 동시에 초기화해야 한다.
물론 try-catch 문은 여기서 예외다. 변수를 초기화할 때 예외를 던질 가능성이 있으면 try 블록 안에서 초기화해야 한다. try 블록을 넘어서도 사용할 것 같으면 try 블록 앞에서 선언해야 한다.

Iterator<Element> i = c.iterator();
while (i.hasNext()) {
    doSomething(i.next());
}

...

Iterator<Element> i2 = c2.iterator();
while (i.hasNext()) {
    doSomethingElse(is.next());
}

두 번째 while문에 i가 실수로 다시 쓰였다. i의 유효 범위가 남아 있어서 의도하지 않게 코드가 돌아간다.

for 문을 쓰면 이런 오류를 미리 잡을 수 있는데, 반복문이 사용한 워소와 유효 범위가 반복문과 ㅎ마꼐 끝나기 때문이다.

for (Iterator<Element> i = c.iterator(); i.hasNext(); ) {
    Element e = i.next();
    ...
}

// 컴파일 오류. i를 찾을 수 없다
for (Iterator<Element> i2 = c2.iterator(); i.hasNext(); ) {
    Element e2 = i2.hnext();
    ...
}

또한 for 문에서는 변수 유효 범위가 for문 범위와 일치해서 똑같은 이름의 변수를 여러 반복문에서 쓸 수 있어서 더 세련되다.

for (int i = 0; n = expensiveComputation(); i < n; i++ ) {
    ... // i로 뭐를 한다.
}

i의 한계값을 n에 저장하여 반복 때마다 다시 계산해야 하는 비용을 없앴다. 같은 값을 반환하는 메서드를 매번 호출한다면 이 관용구를 사용하자.

메서드를 작게 유지하고 한 가지 기능에 집중하는 것은 지역변수 범위를 최소화하는 마지막 방법이다.

좋은 웹페이지 즐겨찾기