지역변수의 유효 범위를 최소로 줄이면 코드 가독성과 유지보수성이 높아지고 오류 가능성이 낮아진다.
C와 같은 언어에서는 지연변수를 코드의 블록의 첫 머리에 선언하는 경우가 많았는데, 자바는 문장을 선언할 수 있는 곳이면 어디에서든지 선언이 가능하다.
'가장 처음 쓰일 때 선언하기'를 통해 지역변수의 범위를 줄여라! 미리 선언하는 것은 가독성을 떨어뜨린다.
또한 지역변수의 범위는 선언된 지점부터 그 지점을 포함한 블록이 끝날때까지 이기 때문에, 범위에 대해 실수하지 않도록 조심한다.
'거의 모든 지역변수는 선언과 동시에 초기화' 되어야 한다. 초기화에 필요한 정보가 충분하지 않다면 충분해질 때까지 선언을 미뤄야 한다. try-catch의 경우, 유효성 검사를 위해 try 블록 안에서 검사해야 하는 경우가 있다.
반복 변수의 값을 반복문이 종료된 뒤에도 써야 하는 것이 아니라면 'while'보다는 'for'를 쓴다.
for ( Element e : c ) {
//Todo : 해야 할 일
}
반복자 for-each문 대신 for문을 써야 하는 경우
for(Iterator<Element> i = c.iterator(); i.hasNext(); ) {
Element e = i.next();
}
for문은 붙여넣기 오류를 줄여 줄 수 있다. 유효 범위가 for 문 범위와 일치하여 똑같은 이름의 변수를 여러 반복문에서 써도 아무런 영햐을 주지 않는다.
지역변수의 범위를 최소화하는 또 다른 반복문 관용구가 있다.
for( int i = 0, n = expensiveComputation(); i < n; i++ ) {
//Todo : 해야 할 일..
}
이 관용구는 범위가 정확히 일치하는 두 반복변수 i, n에 주목 할 필요가 있다. 반복 때마다 다시 계산해야 하는 비용을 없앴다. 같은 값을 반환하는 메서드를 매번 호출한다면 이 관용구를 사용해야 한다.
메서드를 작게 유지하고 한 가지 기능에 집중하는 것도 방법이다. 메서드를 기능별로 쪼갠다. 한 메서드에서 여러 가지 기능을 처리한다면 한 기능과 관련된 지역변수라도 다른 기능에 영향을 미칠 수 있다.
* 느낀점
큰 시스템을 만들수록 많은 변수들을 사용하는 것이 불가피하다. 따라서, 최대한 가독성이 좋고 의미를 명확히 하는 것이 중요 할 것이다. for-each에 대한 고려를 하고 지역변수의 반복사용이 있다면, for문 안에 넣어서 범위를 최소화 하는 것도 고려할 수 있다. 베스트는 메서드를 작게 유지해서 한 기능에 집중하는 방식을 만드는 것이라고 동의한다.
'회고 > 이펙티브 자바 3판' 카테고리의 다른 글
[ 아이템 62 ] 다른 타입이 적절하다면 문자열 사용을 피하라 (0) | 2021.02.10 |
---|---|
[ 아이템 61 ] 박싱된 기본 타입보다는 기본 타입을 사용하라 (0) | 2021.02.10 |
[ 아이템 60 ] 정확한 답이 필요하다면 float와 double은 피하라 (0) | 2021.02.10 |
[ 아이템 59 ] 라이브러리를 익히고 사용하라 (0) | 2021.02.10 |
[ 아이템 58 ] 전통적인 for 문보다는 for-each 문을 사용하라 (0) | 2021.02.10 |