본문 바로가기

JAVA

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

728x90

지역변수의 유효범위를 최소로 줄이면 코드 가독성과 유지보수성 증가 , 오류 가능성 낮아짐(오류의 전파 범위가 작아짐)

 

모든 지역변수는 선언과 동시에 초기화 하라

 

  • 가장 처음쓰일때 선언하기
  • 생각없이 지역변수를 선언하다보면 변수가 실제 쓰이는 범위보다 앞서거나 다 쓴뒤에도 여전히 살아있기 쉬움
  • 지역변수의 벙뮈는 선언지점부터 그 블록이 끝날떄까지
  • 거의 모든 변수는 선언과 동시에 초기화해야한다.(초기화에 필요한 정보가 충분하지 않다면 선언을 미뤄야함, try-catch 는 예외)
	Connection conn = null;
        PreparedStatement stmt = null; 
        ResultSet rs = null; 
        //...
        try {
            // DB에 연결함
            conn = DriverManager.getConnection(Const.DB_URL, Const.DB_USER, Const.DB_PASSWORD);
            
 			//...           
            
        } catch (SQLException e) {
            throw new RuntimeException(e.getMessage(), e);
        }

 

 

while 문을 사용하는 경우에도 for문을 사용하는 것이 낫다.

  • 반복문(for, for-each문 등) 에서는 반복 변수(loop variable)의 범위와 반복문 몸체, 그리고 몸체사이의 괄호에 제한됨)
  • 반복자(iterator)나 인덱스로 무언가를 할때에는 for-each보다 for문이 낫다.
for(Element e : c){
// e로 무언가를 한다.
}

for(Iterator<Element> idx = c.iterator(); idx.hasNext();){
	Element e = idx.next();
    //e,idx로 무언가를 한다.
}

 

  • 반복변수의 값을 반복문이 종료된 뒤에도 사용하는 것이 아니라면 while보다 for문이 낫다.(복사해 붙여놓기 버그 방지)
/* while 버전*/


Iterator<Element> i = c.iterator(); //외부에서 반복자 선언
while(i.hasNext()) {
    doSomeThing(i.next());
}

Iterator<Element> i2 = c2.iterator();
while(i.hasNext()) { //복붙에서 i를 i2로 바꾸지 않아 로직이 제대로 동작하지 않았다.
    doSomeThing(i2.next());
}


/* for 버전*/


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

for(Iterator<Element> i2 = c2.iterator(); i.hasNext();) { // 컴파일 시점에 "can not resolve variable i" 에러 발생
    Element e2 = i2.next();
}

 

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

  • 메서드를 기능별로만 쪼개자 (SRP) 한 메서드당 한가지 기능만 처리

'JAVA' 카테고리의 다른 글

interrupt vs notify  (0) 2021.03.16
item 54) null이 아닌 빈 컬렉션이나 배열을 반환하라  (0) 2021.03.12
item 53) 가변인수는 신중히 사용하라  (0) 2021.03.12
HashMap 의 capacity와 load factor  (0) 2020.12.27
ThreadLocal  (0) 2020.11.22