-
[Effective Java] Item 57. 지역변수의 범위를 최소화하라Java/Effective Java 2020. 10. 18. 14:50반응형
이번 아이템은 Item 15에서 다뤘던 "클래스와 멤버의 접근 권한을 최소화하라"와 취지가 비슷합니다. 지역변수의 유효 범위를 최소로 줄이면 코드 가독성과 유지보수성이 높아지고 오류 가능성은 낮아집니다.
지역변수의 범위를 줄이는 방법
가장 처음 쓰일 때 선언하기
사용하려면 멀었는데, 미리 선언부터 해두면 코드가 어수선해져 가독성이 떨어집니다. 변수를 실제로 사용하는 시점엔 타입과 초깃값이 기억나지 않을 수도 있습니다.
지역변수의 범위는 선언된 지점부터 그 지점을 포함한 블록이 끝날 때까지이므로, 실제 사용하는 블록 바깥에 선언된 변수는 그 블록이 끝난 뒤에도 여전히 살아 있게 됩니다. 실수로 의도한 범위 앞 혹은 뒤에서 그 변수를 사용하면 끔찍한 결과를 초래할 수 있습니다.
거의 모든 지역변수는 선언과 동시에 초기화
초기화에 필요한 정보가 충분하지 않다면 충분해질 때까지 선언을 미뤄야 합니다. try-catch 문은 이 규칙에서 예외입니다. 변수를 초기화하는 표현식에서 검사 예외를 던질 가능성이 있다면 try 블록 안에서 초기화되어야 하기 때문입니다.
반복문에서의 반복 변수는 범위가 반복문의 몸체, 그리고 for 키워드와 몸체 사이의 괄호 안으로 제한됩니다. 따라서 반복 변수의 값을 반복문이 종료된 뒤에도 써야하는 상황이 아니라면 while 문보다 for 문을 쓰는 편이 낫습니다.
컬렉션이나 배열을 순회하는 반복문
for (Element e : c) { //something job.. }
반복자를 사용해야 하는 상황이라면 for-each 문 대신 for 문을 쓰는 것이 낫습니다.
for (Iterator<Element> i = c.iterator(); i.hasNext(); ) { Element e = i.next(); //something job... }
반복 여부를 결정짓는 변수의 한계값이 매번 같다면, 반복 때마다 다시 계산해야 하는 비용을 없앨 수 있습니다.
for (int i = 0, n = expensiveComputation(); i < n; i++) { //something job... }
메서드를 작게 유지하고 한 가지 기능에 집중하기
한 메서드에서 여러 가지 기능을 처리한다면 그중 한 기능과만 관련된 지역변수라도 다른 기능을 수행하는 코드에서 접근할 수도 있습니다. 해결책은 단숳니 메서드를 기능별로 쪼개면 됩니다.
참고자료
반응형'Java > Effective Java' 카테고리의 다른 글
[Effective Java] Item 64. 객체는 인터페이스를 사용해 참조하라 (0) 2020.10.24 [Effective Java] Item 58. 전통적인 for 문보다는 for-each 문을 사용하라 (0) 2020.10.20 [Effective Java] Item 54. null이 아닌, 빈 컬렉션이나 배열을 반환하라 (0) 2020.10.15 [Effective Java] Item 53. 가변인수는 신중히 사용하라 (0) 2020.10.14 [Effective Java] Item 51. 메서드 시그니처를 신중히 설계하라 (0) 2020.10.13