이번 아이템은 기본적으로 “클래스와 멤버의 접근 권한을 최소화하라”고 한 아이템 15의 취지와 비슷하다.
지역변수의 유효 범위를 최소로 줄이면 코드 가독성과 유지 보수성이 높아지고 오류 가능성은 낮아진다.
사용하려면 멀었는데, 미리 선언부터 해두면 코드가 어수선해져 가독성이 떨어진다.
변수를 실제로 사용하는 시점엔 타입과 초깃값이 기억나지 않을 수도 있다.
지역변수를 생각 없이 선언하다 보면 변수가 쓰이는 범위보다 너무 앞서 선언하거나, 다 쓴 뒤에도 여전히 살아 있게 되기 쉽다.
지역변수의 범위는 선언된 지점부터 그 지점을 포함한 블록이 끝날 때까지이므로, 실제 사용하는 블록 바깥에 선언된 변수는 그 블록이 끝난 뒤까지 살아 있게 된다.
초기화에 필요한 정보가 충분하지 않다면 충분해질 때까지 선언을 미뤄야 한다.
try-catch 문은 이 규칙에서 예외다. 변수를 초기화하는 표현식에서 검사 예외를 던질 가능성이 있다면 try 블록 안에서 초기화해야 한다. (그렇지 않으면 예외가 블록을 넘어 메서드에까지 전파된다)
아이템 45에서 이야기했듯, 스트림이 제격인 작업이 있고 반복이 제격인 작업이 있다.
다음은 전통적인 for 문으로 컬렉션을 순회하는 코드다.
for(Iterator<Element> i = c.iterator(); i.hasNext();) {
Element e = i.next();
}
그리고 다음은 전통적인 for 문으로 배열을 순회하는 코드다
for(int i = 0; i < a.length; i++) {
... // a[i] 무언가 한다
}
이 관용구들은 while 문보다는 낫지만 가장 좋은 방법은 아니다.
반복자와 인덱스 변수는 모두 코드를 지저분하게 할 뿐 우리에게 진짜 필요한건 원소들뿐이다.