[이펙티브자바] 9장 일반적인 프로그래밍 원칙

 

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

  • 지역변수의 유효범위를 최소로 줄이면 코드 가독성과 유지보수성이 높아지고 오류 가능성은 낮아진다.
  • 지역변수의 범위를 줄이는 가장 강력한 기법은 ‘가장 처음 쓰일 때 선언하기‘다.
  • 거의 모든 지역변수는 선언과 동시에 초기화해야한다. 초기화에 필요한 정보가 충분하지 않다면 충분해질 때까지 선언을 미뤄야 한다. try-catch문은 이 규칙에서 예외다. 변수 초기화 표현식에서 검사 예외를 던질 가능성이 있다면 try블록 안에서 초기화해야한다.
  • 반복문은 변수범위를 최소화 해주기 때문에 가능하면 while문보다 for문을 쓰는것이 낫다.
  • 메서드를 작게 유지하고 한가지 기능에 집중해야 한다.

 

전통적인 for문보다는 for-each문을 사용하라

  • 전통적인 for문과 비교했을 때 명료하고, 유연하고, 버그를 예방해준다. 성능저하도 없다.
  • for-each문을 사용할 수 없는 상황은 아래 3가지가 있다.
    1. 파괴적인 필터링 (destructive filtering) : 컬렉션을 순회하면서 선택된 원소를 제거해야 하는 경우
    2. 변형 (transforming) : 리스트나 배열을 순회하면서 원소의 값 일부 혹은 전체를 교체해하는 경우
    3. 병렬 반복 (parallel iteration) : 여러 컬렉션을 병렬로 순회

 

라이브러리를 익히고 사용하라

 

정확한 답이 필요하다면 float와 double은 피하라

  • 과학과 공학 계산용으로 설계되었으며 특히 금융 관련 계산과는 맞지 않는다. 금융 계산에는 BigDecimal, int, long을 사용해야 한다.
  • 코딩 시의 불편함이나 성능 저하를 신경 쓰지 않겠다면 BigDecimal을 사용하라. BigDecimal이 제공하는 8가지 반올림 모드를 이용해 제어할 수 있다.
  • 반면, 성능이 중요하고 숫자가 너무 크지 않다면 intlong을 사용하라숫자가 아홉 자리 십진수로 표현될 수 있다면 int, 열여덟자리 십진수로 표현할 수 있다면 long, 그 이상을 넘어가면 BigDecimal을 사용해야 한다.

 

박싱된 기본 타입보다는 기본 타입을 사용하라

 

다른 타입이 적절하다면 문자열 사용을 피하라

  • 문자열은 다른 값 타입을 대신하기에 적합하지 않다.
  • 문자열은 열거 타입을 대신하기에 적합하지 않다.
  • 문자열은 혼합 타입을 대신하기에 적합하지 않다.
  • 문자열은 권한을 표현하기에 적합하지 않다.

 

문자열 연결은 느리니 주의하라

  • 문자열 연결 연산자로 문자열 n개를 잇는 시간은 n^2에 비례한다.

 

객체는 인터페이스를 사용해 참조하라

  • 적합한 인터페이스만 있다면 매개변수뿐 아니라 반환값, 변수, 필드를 전부 인터페이스 타입으로 선언하라.
  • 적합한 인터페이스가 없다면 당연히 클래스로 참조해야한다.

 

네이티브 메서드는 신중히 사용하라

  • 성능을 개선할 목적으로 네이티브 메서드를 사용하는 것은 권장하지 않는다.

 

최적화는 신중히 하라

  • 성능 때문에 견고한 구조를 희생하지 말자. 빠른 프로그램보다는 좋은 프로그램을 작성하라.
  • 성능을 제한하는 설계를 피하라
  • API를 설계할 때 성능에 주는 영향을 고려하라. 그러나 성능을 위해 API를 왜곡하는 건 매우 안 좋은 생각이다.