[Effective Java]일반적인 프로그래밍 원칙들_1

Kim Ji Yun·2021년 11월 22일
0

Effective Java

목록 보기
1/9
post-thumbnail

1. 지역변수의 유효범위를 최소화 하라

  • 자바에서 명령문(statement)을 둘 수 있는 자리에는 변수도 선언 가능
  • 지역 변수의 유효범위를 최소화 하기 위해 처음 사용하는 곳에 선언
  • 거의 모든 지역 변수 선언에는 초기값(initializer)이 포함
  • while문 보다는 for문 사용

ex01) 컬렉션 순환 시 예제

//컬렉션을 순회할 때는 이 숙어대로 하는 것이 바람직 for (Element e : c) {
    foSomething(e;
}

ex02) while문 사용 시 발견되는 버그

Iterator<Element> i = c.iterator();
while (i.hasNext()) {
    doSomething(i.next());
}
...
Iterator<Element> i2 = c2.iterator();
while (i.hasNext()) {
    doSomethingElse(i2.next());
}
// 버그!
  • copy and paste하여 코드 작성 시 위와같은 버그 발견
  • 새로운 순환문에서 변수 i2를 초기화 하였으나, 실제로는 전 순환문의 변수 i를 사용
  • i가 유효범위 안에 있기 때문에 컴파일 및 실행이 되지만 의도와 맞지 않게 동작함

ex03) for문을 사용한 예제

for (Iterator<Element> i = c.iterator(); i.hasNext(); } {
    soSomething(i.next());
} ...
//심볼i를 찾을 수 없다면서 컴파일 시점에 오류 발생
for (Iterator<Element> i2 = c2.iterator(); i.hasNext(); } {
    doSomething(i2.next());
}
  • 선언한 변수명이 다를 시 컴파일 오류 발생
  • 각각의 for문은 서로 의존성이 없으므로 같은 변수명을 거듭 사용 가능
  • while문 보다 코드 길이가 짧아서 가독성 높음

ex04) 순환문 내에 두 개의 변수를 선언하는 예제

for (int i = 0; n = expensiveComputation(); i < n; i++ ) {
    doSomthing(i);
}
  • 변수 i와 n의 유효범위는 for문 안으로 제한됨
  • n의 값을 미리 계산해 넣어두고 사용함으로써 매번 재계산 할 필요가 없음

메서드의 크기를 줄이고 특정한 기능에 집중

0개의 댓글