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에 접근하려고 했기 때문이다.

🫧 메서드를 작게 유지하고 한 가지 기능에 집중해라

메서드를 기능별로 쪼개면 된다.