-
Notifications
You must be signed in to change notification settings - Fork 2
Open
Labels
🐽 09 General Programming9장 일반적인 프로그래밍 원칙9장 일반적인 프로그래밍 원칙
Description
Chapter : 9. 일반적인 프로그래밍 원칙
Item : 57. 지역변수의 범위를 최소화하라
Assignee : byunghyunkim0
🍑 서론
지역변수의 유효 범위를 최소로 줄이면 코드 가독성과 유지보수성이 높아지고 오류 가능성은 낮아진다.
🍑 본론
지역변수의 범위를 줄이는 기법
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. 메서드를 작게 유지하고 한 가지 기능에 집중하기
- 메서드에서 여러 가지 기능을 처리한다면 그 중 한 기능과 관련된 지역변수라도 다른 기능을 수행하는 코드에서 접근할 수 있다.
- 메서드를 기능별로 쪼개면 됨
🍑 결론
Referenced by
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
🐽 09 General Programming9장 일반적인 프로그래밍 원칙9장 일반적인 프로그래밍 원칙