본문 바로가기

이펙티브 자바

[이펙티브 자바] 아이템 6. 불필요한 객체 생성을 피하라

똑같은 기능의 객체를 매번 생성하기 보다는 객체 하나를 재사용하는 편이 나을 때가 많다. 

 

예시 : 문자열 인스턴스의 불필요한 생성 피하기

비효율적인 예
public String repeat(String str, int count) {
    String result = "";
    for (int i = 0; i < count; i++) {
        result += str; // 매 반복마다 새로운 String 객체 생성
    }
    return result;
}

효율적인 예
public String repeat(String str, int count) {
    StringBuilder result = new StringBuilder();
    for (int i = 0; i < count; i++) {
        result.append(str); // 동일한 StringBuilder 객체를 재사용
    }
    return result.toString();
}

자바에서 String 객체는 불변이다. 불변이란 한 번 생성된 String 객체의 내용이 변경될 수 없다는뜻이다.  비 효율적인 예에서 문자열을 반복적으로 연결할 때마다 새로운 String 객체가 생성되어 메모리 사용량이 증가하고 성능이 저하된다.

 

예시 : 불변 객체의 재사용

비효율적인 예
Boolean trueValue = new Boolean(true); // 불필요한 Boolean 객체 생성
Boolean falseValue = new Boolean(false);

효율적인 예
Boolean trueValue = Boolean.valueOf(true); // Boolean 객체 재사용
Boolean falseValue = Boolean.valueOf(false);

불변 객체는 내부 상태가 변경되지 않으므로 같은 값을 가지는 인스턴스를 여러번 생성할 필요가 없다. 

예를 들어, Boolean.valueOf(boolean) 메소드는 Boolean.TRUE 또는 Boolean.FALSE를 반환하여, 같은 Boolean 객체를 재사용할 수 있게 한다.

 

결론 : 기존 객체를 재사용해야 한다면 새로운 객체를 만들지 마라.