티스토리 뷰

728x90
반응형

지역변수의 범위를 최소화하라


  • 지역변수의 유효범위를 최대한 줄이면 코드 가독성과 유지보수성이 높아지고 오류 가능성은 낮아집니다.

 

💡 가장 처음 쓰일때 선언합니다.

  • 지역변수를 미리 선언하고 나중에 할당하면 코드가 지저분해지고 가독성이 떨어집니다.
  • 또한 변수를 실제 사용하는 시점에서 타입과 초기값이 기억나지 않을 수 있습니다.
  • 변수의 범위를 제대로 제한하지 않는다면 이미 사용한 뒤에도 GC가 수거하지 않고 힙 메모리에 여전히 남아있을 수 있습니다.

 

💡 모든 지역변수는 선언과 동시에 초기화합니다.

  • 단 초기화에 필요한 정보가 충분하지 않다면 정보가 충분해질때까지 선언을 미뤄야 합니다. 하지만 try-catch 문에서는 예외입니다. 변수를 초기화하는 과정에서 Checked Exception이 발생할 가능성이 있다면 이를 try 블럭 안에서 초기화해야 합니다.
  • 반복문에서는 반복 변수의 범위가 반복문의 몸체, 그리고 for 키워드와 몸체 사이 중괄호 안으로 제한됩니다.
int memberId;
try {
    memberId = memberRepository.get();
} catch (NoSuchElementException e) {
 	throw new NoSuchElementException();
}

 

💡 while문을 사용하는 경우에도 for문을 사용하는게 좋습니다.

  • 아래의 while문 코드에서는 버그가 발생합니다. 복사 붙여넣기를 하면 두번째 while문에서 i.hasNext()이기 때문에 버그가 발생합니다.
  • for문을 포함한 for-each문을 사용하면 이러한 문제를 컴파일 단계에서 잡아줍니다.
    (반복자의 유효범위가 for문의 종료와 함께 끝나기 때문입니다.)
Iterator<Element> i = c.iterator();
while(i.hasNext()) {
    doSomeThing(i.next());
}

Iterator<Element> i2 = c2.iterator();
while(i.hasNext()) { // 버그 발생!!
    doSomeThing(i2.next());
}

 

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

for(Iterator<Element> i2 = c2.iterator(); i.hasNext();) {
    Element e2 = i2.next();
}

 

💡 메서드를 가능한 작게 유지하고 한 가지 기능에 집중하는게 좋습니다.

  • 한 메서드에 여러 기능을 처리한다면 그중 한 기능과 관련된 지역변수라도 다른 기능을 수행하는 코드에 접근할 수 있습니다. 이를 방지하기 위해서는 메서드를 쪼개는게 좋습니다.

 

 

 

 

 

728x90
반응형