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 |