57. 지역변수의 범위를 최소화하라

이번 아이템은 기본적으로 “클래스와 멤버의 접근 권한을 최소화하라”고 한 아이템 15의 취지와 비슷하다.

지역변수의 유효 범위를 최소로 줄이면 코드 가독성과 유지 보수성이 높아지고 오류 가능성은 낮아진다.

지역변수의 범위를 줄이는 가장 강력한 기법은 역시 ‘가장 처음 쓰일 때 선언하기’다.

사용하려면 멀었는데, 미리 선언부터 해두면 코드가 어수선해져 가독성이 떨어진다.

변수를 실제로 사용하는 시점엔 타입과 초깃값이 기억나지 않을 수도 있다.

지역변수를 생각 없이 선언하다 보면 변수가 쓰이는 범위보다 너무 앞서 선언하거나, 다 쓴 뒤에도 여전히 살아 있게 되기 쉽다.

지역변수의 범위는 선언된 지점부터 그 지점을 포함한 블록이 끝날 때까지이므로, 실제 사용하는 블록 바깥에 선언된 변수는 그 블록이 끝난 뒤까지 살아 있게 된다.

또한 거의 모든 지역변수는 선언과 동시에 초기화해야 한다.

초기화에 필요한 정보가 충분하지 않다면 충분해질 때까지 선언을 미뤄야 한다.

try-catch 문은 이 규칙에서 예외다. 변수를 초기화하는 표현식에서 검사 예외를 던질 가능성이 있다면 try 블록 안에서 초기화해야 한다. (그렇지 않으면 예외가 블록을 넘어 메서드에까지 전파된다)

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

58. 전통적인 for 문보다는 for-each문을 사용하라

아이템 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 문보다는 낫지만 가장 좋은 방법은 아니다.

반복자와 인덱스 변수는 모두 코드를 지저분하게 할 뿐 우리에게 진짜 필요한건 원소들뿐이다.