본문 바로가기
기타/이펙티브 자바

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

by 창이2 2022. 10. 15.

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

 1.1.  지역 변수의 값을 반복문이 종료된 뒤에 사용되지 않는 경우 while문 보다 for문을 이용하는게 났다.

 1.2. 복사 붙여넣기시 while문 보다 오류가 날 확률이 적다.

 1.3. while문 보다 가독성이 더 좋다

더보기
List<String> strList = List.of("11111","22222");

// for 문 안에서만 지역변수가 사용된다.
for (String text : strList) {
    System.out.println(text);
}

// 반복문 밖에 지역변수가 사용된다.
Iterator<String> i = strList.iterator();
while (i.hasNext()){
    System.out.println(i.next());
}

 

2. for 문보다는 for-each 문을 사용하라

 2.1. for-each 문은 명료하고 유연하며 버그를 예방할 수 있다.

 2.2. 특정 인덱스에 삭제, 변경이나 병렬 반복이 필요한 경우 for문을 사용해야 한다.

 

3. (표준)라이브러리를 익히고 사용하라

 3.1. 전문가들의 검증이 이루어진 라이브러리이기 때문에 안정성이 높다.

 3.2. 큰 시간을 낭비하지 않아도 된다.

 3.3. 성능이 지속적으로 개선된다.

 3.4. 다른 사람들과 코드경험을 공유할 수 있다.

 

4. 정확한 답이 필요하면 float나 double는 피하라.

 4.1. 소수점 오차가 일어날 수 있다.

 

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

 5.1. 기본 타입은 값만 갖고 있으나 박싱된 타입은 값과 식별성을 가져 값이 같아도 다르다고 판단할 수 있다.

 5.2. 기본 타입은 언제나 유효한 값을 가지지만 박싱된 타입은 유효하지 않는 null을 가질 수 있다.

 5.3. 기본타입과 박싱된 타입을 혼용한 연산에서는 기본타입보다 성능이 떨어진다.

 5.4. 박싱된 기본 타입은 컬렉션이나 리플렉션을 사용할 때 쓰자

        // 둘다 false를 반환한다. == 비교는 주소 비교이기 때문에 equals 비교를 해야한다.
        
        Integer integer1 = new Integer(11);
        Integer integer2 = new Integer(11);

        String string1 = new String("11");
        String string2 = new String("11");


        System.out.println(integer1==integer2);
        System.out.println(string1==string2);

 

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

 6.1. int, boolean 으로 표현할 수 있다면 문자열이 아닌 해당 타입을 사용하자. 

 6.2. String으로 키값을 갖기 보다는 전용 클래스를 만드는게 더 낫다.

 

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

 7.1. + 연산의 문자열 연결은 시간상 n^2에 메모리에도 계속 생성되니 StringBuilder나 StringBuffer를 사용하자.

 

 

댓글