지역변수의 유효 범위를 최소로 줄이면 코드 가독성과 유지보수성이 높아지고 오류 가능성은 낮아진다.
🍑 본론
지역변수의 범위를 줄이는 기법
1. 가장 처음 쓰일 때 선언하기
지역변수의 범위를 줄이는 가장 강력한 기법이다.
미리 선언부터 해두면 변수를 사용하는 시점에 타입과 초기값이 기억나지 않을 수도 있다.
지역변수의 범위는 선언된 지점부터 그 지점을 포함한 블록이 끝날 때까지 이므로, 실제 사용하는 블록 바깥에 선언된 변수는 블록이 끝난 뒤까지 살아 있게 된다.
2. 거의 모든 지역변수는 선언과 동시에 초기화하기
초기화에 필요한 정보가 충분하지 않다면 충분해질 때까지 선언을 미뤄야 한다.
try-catch문은 이규칙에서 예외
변수를 초기화하는 표현식에서 검사 예외를 던질 가능성이 있다면 try 불록 안에서 초기화해야 한다.
변수 값을 try 블록 바깥에서도 사용해야 한다면 try블록 앞에서 선언
// 리플렉션으로 활용한 인스턴스화 데모
public class ReflectiveInstantiation {
public static void main(String[] args) {
// 클래스 이름을 Class 객체로 변환
Class<? extends Set<String>> cl = null;
try {
cl = (Class<? extends Set<String>>) // 비검사 형변환!
Class.forName(args[0]);
} catch (ClassNotFoundException e) {
fatalError("클래스를 찾을 수 없습니다.");
}
// 생성자를 얻는다.
Constructor<? extends Set<String>> cons = null;
try {
cons = cl.getDeclaredConstructor();
} catch (NoSuchMethodException e) {
fatalError("매개변수 없는 생성자를 찾을 수 없습니다.");
}
....
}
3. while 문 보다는 for (for-each)문을 사용하라
반복문은 변수 범위를 최소화해준다.
반복 변수의 값을 반복문이 종료된 뒤에도 써야 하는 상황이 아니라면 while 문보다는 for 문을 쓰는 편이 좋다.
Iterator<Element> i = c.iterator();
while (i.hasNext()) {
doSomething(i.next());
}
...
Iterator<Element> i2 = c.iterator();
while (i.hasNext()) { // 버그
doSomething(i2.next());
}
i의 유효 범위가 끝나지 않았으므로, 컴파일시 오류가 발생하지 않는다.
for (Iterator<Element> i = c.iterator(); i.hasNext(); ) {
Element e = i.next();
... // e와 i로 무언가를 한다.
}
...
// 다음 코드는 "i를 찾을 수 없다"는 컴파일 오류를 낸다.
for (Iterator<Element> i2 = c2.iterator(); i.hasNext(); ) {
Element e2 = i2.next();
... // e2와 i2로 무언가를 한다.
}
똑같은 이름의 변수를 여러 반복문에서 써도 서로 아무런 영향을 주지 않는다.
4. 메서드를 작게 유지하고 한 가지 기능에 집중하기
메서드에서 여러 가지 기능을 처리한다면 그 중 한 기능과 관련된 지역변수라도 다른 기능을 수행하는 코드에서 접근할 수 있다.
Chapter : 9. 일반적인 프로그래밍 원칙
Item : 57. 지역변수의 범위를 최소화하라
Assignee : byunghyunkim0
🍑 서론
지역변수의 유효 범위를 최소로 줄이면 코드 가독성과 유지보수성이 높아지고 오류 가능성은 낮아진다.
🍑 본론
지역변수의 범위를 줄이는 기법
1. 가장 처음 쓰일 때 선언하기
2. 거의 모든 지역변수는 선언과 동시에 초기화하기
try-catch
문은 이규칙에서 예외변수 값을 try 블록 바깥에서도 사용해야 한다면 try블록 앞에서 선언
3. while 문 보다는 for (for-each)문을 사용하라
4. 메서드를 작게 유지하고 한 가지 기능에 집중하기
🍑 결론
Referenced by
-