[Effective Java] 아이템 57 : 지역변수의 범위를 최소화하라

Loopy·2022년 10월 15일
0

이펙티브 자바

목록 보기
56/76
post-thumbnail

지역변수의 유효 범위를 최소로 줄이면, 코드 가독성과 유지보수성이 높아지고 오류 가능성은 낮아진다. 그렇다면, 유효 범위를 줄이는 방법들에 대해 알아보자.

🔖 지역변수의 선언 위치
C 언어 : 지역변수를 코드 블럭의 첫 머리에 선언
JAVA : 문장을 선언할 수 있는 곳이면 어디서든 변수를 선언 가능

🔗 지역변수의 범위 최소화(1)

첫번째로, "가장 처음 쓰일때 선언"하는 방법이다. 하지만 해당 방법은 변수의 생명주기 밖에서 잘못 사용될 위험성이 있고, 가독성이 떨어진다.

따라서 거의 모든 지역변수는 선언과 동시에 초기화 해야 한다. 즉, 초기화에 필요한 정보가 충분하지 않다면 충분해질 때까지 선언을 미뤄야 하는 것이다.

🔗 지역변수의 범위 최소화(2)

두번째 방법은, for / for-each와 같은 반복문을 사용해 범위를 최소화 할 수 있다.

반복문에서는 반복 변수(loop variable)의 범위가 반복문의 몸체, 그리고 for 키워드와 몸체 사이의 괄호 안으로 제한되기 때문이다. 아래의 예시를 봐보자.

while문 사용

Iterator<Element> i = c.iterator();
while(i.hasNext()) {
	doSomething(i.next());

Iterator<Element> i2 = c.iterator();
while(i.hasNext()) {  // 순회하지 않고 곧장 끝나버리는 버그 발생
	doSomething(i2.next());

지역변수 i 의 유효 범위가 아직 끝나지 않았으므로, 에러가 있는 코드임에도 컴파일도 잘 되고 실행시 예외도 던지지 않는 문제가 발생한다. 따라서 웬만하면 for 문을 사용하는 것이 좋다.

for문 사용

for (Element e : c){
	...
}
for (Iterator<Element> i = c.iterator(); i.hasNext(); ) { 
	Element e = i.next();
    ...
}

// 다음의 코드는 "i를 찾을 수 없다"는 컴파일 오류를 발생시킨다.
for (Iterator<Element> i2 = c.iterator(); i.hasNext(); ) { 
	Element e = i2.next();;
    ...
}

for 문을 사용한다면, 이러한 복사해 붙여넣기 오류 를 컴파일 타임에 잡아주게 된다. 그 이유는 다음과 같다.

  1. 첫번째 반복문이 사용한 원소와 반복자의 유효 범위가 반복문 종료와 함께 끝난다.
  2. 변수 유효 범위가 for 문과 일치한다. 즉, 똑같은 이름의 변수를 여러 반복문에서 써도 서로 영향을 주지 않는다.

따라서 반복 변수의 값을 반복문 종료 뒤에도 써야 하는 상황이 아니라면 while문 대신 for문을 쓰도록 하자.

🔗 지역변수의 범위 최소화(3)

마지막 방법은, 메서드를 작게 유지하고 한 가지 기능에 집중하는 것이다.
한 메서드에서 여러 가지 기능을 처리한다면 다른 기능을 수행하는 코드에서도 변수에 접근할 수 있게 되므로 단순히 메서드를 기능별로 쪼개도록 하자.

profile
개인용으로 공부하는 공간입니다. 잘못된 부분은 피드백 부탁드립니다!

0개의 댓글