[Java] Item 57 : 지역변수의 범위를 최소화하라
Effective Java를 읽고 정리한 정리본입니다.
📌 Item 57 : 지역변수의 범위를 최소화하라
🫧 가장 처음 쓰일 때 선언하기
미리 선언부터 해 두면 코드가 어수선해져 가독성이 떨어질 수 있으며, 실제로 사용하는 시점에 타입과 초깃값이 기억나지 않을 수 있다.
특히, 변수가 쓰이는 범위를 넘어서 선언될 수 있으며, 실제 사용하는 블록 바깥에 선언된 변수는 그 블록이 끝난 뒤까지 살아있게 되는 문제점이 발생한다.
🫧 거의 모든 지역 변수는 선언과 동시에 초기화하기
반면 try-catch문은 예외이다.
변수를 초기화하는 표현식에서 검사 예외를 던질 가능성이 있다면 try 블록 안에서 초기화해야 예외가 블록을 넘어 메서드에까지 전파되는 것을 방지할 수 있다.
🫧 반복 변수의 범위가 반복문에 한정되어 있다면 for 문을 사용하라
예를 들어 다음과 같이 for문과 while문을 사용해 같은 기능을 하는 코드를 구현했다고 하자.
// while문
Iterator<Element> i = c.iterator();
while(i.hasNext()) {
doSomething(i.next());
}
...
Iterator<Element> i2 = c2.iterator();
while(i.hasNext()) { // 버그!
doSomething(i2.next());
}
while문으로 쓰여진 코드에서는 새로운 반복 변수 i2를 초기화했지만 실수로 이전 while 문에서 쓴 i를 다시 사용하고 있다.
i의 유효 범위는 아직 끝나지 않았으므로, 이 코드는 컴파일도 잘 되고 실행 시 예외도 던지지 않지만 두 번째 while문은 c2를 순회하지 않고 곧장 끝나버리게 된다.
// for문
for (Iterator<Element> i = c.iterator(); i.hasNext();) {
Element e = i.next();
}
for (Iterator<Element> i2 = c2.iterator(); i.hasNext();) { // 버그!
Element e2 = i2.next();
}
반면 for문을 사용하면 두 번째 for문에서 i.hasNext()에 접근하려 했을 떄 컴파일 오류가 난다.
i의 지역 변수 범위가 첫 번째 for문으로 한정되어 있어 두 번째 for문에서는 쓸 수 없는 지역 변수인 i에 접근하려고 했기 때문이다.
🫧 메서드를 작게 유지하고 한 가지 기능에 집중해라
메서드를 기능별로 쪼개면 된다.