요약

지역변수의 범위 최소화하는 법

  1. 지역변수는 가장 처음 쓰일 때 선언해라
  2. 거의 모든 지역변수는 선언과 동시에 초기화해라
  3. 메서드를 기능별로 쪼개 작게 유지하고 한 가지 기능에 집중하게 설계해라

지역변수의 유효 범위를 최소로 줄였을 때의 이점

  • 코드 가독성과 유지보수성이 높아진다
  • 오류 가능성이 낮아진다

 

1. 지역변수는 가장 처음 쓰일 때 선언해라

지역변수를 미리 선언해두면 다음과 같은 문제가 발생할 수 있다.

  • 코드가 어수선해져 가독성 저하
  • 변수를 실제 사용하는 시점에 타입/초깃값 중복 확인
  • 변수를 다 사용한 뒤에도 변수가 살아있어 다른 곳에서 사용될 수 있고, 그로인한 부작용 발생 가능성이 있다

 

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

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

 

반복문

for 문이나 for-each 문 같은 반복문의 경우에는 반복 변수의 범위가 반복문 괄호와 몸체에 제한되기 때문에 변수의 범위를 최소화할 수 있다. 반복 변수의 값을 반복문이 종료된 뒤에도 써야하는 상황이 아니라면 while문 보다 for 문을 사용하는 것이 더 낫다.

  • 예시1 : 컬렉션이나 배열을 순회하는 권장 관용구
public static void main1(String[] args) {
    ArrayList<String> elements = new ArrayList<>();
        for (String element : elements) {
             // element 를 사용한 로직
        }
}

 

  • 예시2 : while + 복붙 사용시 발생할 수 있는 문제
// 예시 2-2 : while 문 사용시 주의해야할 점 - 복사 붙여넣기

ArrayList<Element> elements = new ArrayList<>();
Iterator<Element> i = elements.iterator();
while (i.hasNext()) {
    // i.next() 를 사용한 로직
}

// 만약 i 를 i2로 변경하지 않더라도 컴파일 오류가 발생하지 않지만,
// 추후 다른 문제 발생 가능성이 있다
ArrayList<Element> elements2 = new ArrayList<>();
Iterator<Element> i2 = elements2.iterator();
while (i.hasNext()) {
    // i2.next() 를 사용한 로직
}

 

  • 예시3 : for 문
ArrayList<Element> elements = new ArrayList<>();
for (Iterator<Element> i = elements.iterator(); i.hasNext();) {
    Element e = i.next();
    // e 와 i 를 사용한 로직
}

ArrayList<Element> elements2 = new ArrayList<>();
// 변수 이름 잘못 입력해도 컴파일 오류로 잡을 수 있다
for (Iterator<Element> i2 = elements2.iterator(); i.hasNext();) { // 컴파일 오류 발생
    Element e = i2.next();
    // e 와 i 를 사용한 로직
}

 

for문 사용의 이점

  1. 반복자 사용 가능
  2. 복사 붙여넣기 시 오류 예방 가능
    1. 복붙 오류를 컴파일 타임에 잡아준다
    2. 변수 유효 범위가 for 문 범위와 일치해 똑같은 이름의 변수를 여러 반복문에서 써도 서로 영향을 주지 않는다
  3. while문보다 짧아서 가독성이 좋다

 

3. 메서드를 작게 유지하고 한 가지 기능에 집중해라

한 메서드에서 여러 가지 기능을 처리한다면 그 중 기능과만 관련된 지역변수라도 다른 기능을 수행하는 코드에서 접근할 수 있을 것이다. 따라서 메서드를 기능별로 쪼개면 위 상황을 예방할 수 있다.

+ Recent posts