이펙티브 자바
[이펙티브 자바] 아이템 6. 불필요한 객체 생성을 피하라
stdio.han
2024. 3. 11. 18:37
똑같은 기능의 객체를 매번 생성하기 보다는 객체 하나를 재사용하는 편이 나을 때가 많다.
예시 : 문자열 인스턴스의 불필요한 생성 피하기
비효율적인 예
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 객체를 재사용할 수 있게 한다.
결론 : 기존 객체를 재사용해야 한다면 새로운 객체를 만들지 마라.