복잡한뇌구조마냥

[JAVA] Effective Java - 지역변수의 범위를 최소화하라 (57) 본문

BE/JAVA

[JAVA] Effective Java - 지역변수의 범위를 최소화하라 (57)

지금해냥 2025. 8. 31. 23:22

요약

  • 지역변수는 짧게, 필요한 순간에만 선언·사용하라.
  • 선언과 동시에 초기화 → 초기화가 어렵다면 정보가 생길 때까지 선언 미루기.
  • 반복문에서는 for문/for-each문을 우선 사용해 변수 범위를 최소화.
  • 메서드는 짧게 유지 → 지역변수도 자연스럽게 짧은 생존 범위를 갖게 된다.
  • 범위 최소화는 가독성, 유지보수성, 안정성을 높이고 버그 발생 가능성을 낮춘다.

1. 왜 지역변수 범위를 최소화해야 할까?

  • 변수의 생존 기간이 길수록 잘못된 사용 가능성이 높아진다.
  • 긴 범위의 변수는 코드 가독성을 해치고, 디버깅과 유지보수에도 불리하다.
  • 따라서 변수는 필요할 때 선언하고, 사용 직후 소멸되도록 작성하는 것이 바람직하다.

2. 기본 원칙

  1. 선언과 동시에 초기화
    • 대부분의 지역변수는 값을 선언과 동시에 초기화해야 한다.
    • 초기화가 어렵다면, 초기화에 필요한 정보가 생기는 순간까지 선언을 미루라.
  2. try 블록 내부에서 초기화
    • 예외 발생 가능성이 있는 객체는 try 블록 안에서 선언·초기화하는 것이 안전하다.
  3. 필요한 범위에서만 사용
    • 변수는 딱 필요한 블록 안에서만 선언하고 사용 후 곧바로 범위를 끝내야 한다.

3. 반복문에서의 변수 범위

while문보다 for문

  • while문은 반복 변수를 블록 밖에서 선언해야 하므로, 반복 종료 후에도 변수가 살아남는다. → 잘못 사용 위험.
  • for문은 반복 변수를 반복문 내부로 한정하기 때문에 범위가 자동으로 줄어든다.
// while 문 — i가 반복문 바깥에서도 접근 가능
int i = 0;
while (i < n) {
    ...
    i++;
}

int i2 = 0;
while (i < n) {
    ...
    i++;
}
// 여기서 i를 실수로 다시 사용할 수도 있음

// for 문 — i는 반복문 내부에서만 유효
for (int i = 0; i < n; i++) {
    ...
}
// i는 여기서 접근 불가 → 안전

for-each 문

  • 컬렉션이나 배열 순회에는 for-each 문을 사용하자.
  • 반복자를 직접 다루지 않으므로 코드가 간결하고 오류 가능성이 적다.

4. 지역변수 범위를 최소화하는 추가 방법

1. 루프 변수 재사용 금지

  • 변수를 반복문 외부에 선언해두고 여러 루프에서 재사용하면,
    이전 값이 남아 있어 버그가 발생할 수 있다. → 루프 내부에서 선언하자.

2. 메서드를 짧게 유지

  • 긴 메서드는 지역변수의 생존 범위를 불필요하게 늘린다.
  • 메서드를 짧게 쪼개면 변수 수도 줄고 범위도 자연스럽게 짧아진다.

3. 불필요한 지역변수 제거

  • 한 번만 쓰이는 변수는 선언하지 말고 식(expression)으로 바로 사용하자.
// 나쁨
int result = compute();
return result;

// 좋음
return compute();

4. 섀도잉(shadowing) 방지

  • 지역변수가 클래스 필드 이름을 가려 혼동을 주는 경우가 많다.
  • 범위를 짧게 가져가면 이런 위험도 줄어든다.

5. 정리

  • 지역변수는 필요할 때 선언하고 즉시 초기화하라.
  • 반복문에서는 for문/for-each문을 우선적으로 사용해 범위를 제한하라.
  • 메서드를 작게 쪼개면 변수 범위도 자연스럽게 줄어든다.
  • 불필요하거나 한 번만 쓰이는 변수는 제거해 코드 단순성을 높여라.

📌 결론

지역변수의 범위를 최소화하면 코드의 가독성과 유지보수성이 높아지고, 버그 발생 가능성은 줄어든다.
변수는 필요한 순간에 선언하고, 가능한 한 빨리 소멸되도록 관리하는 습관을 들이자.

 

LIST