똑같은 기능의 객체를 매번 생성하기 보다는 객체 하나를 재사용하는 편이 나을 때가 많다.
예시 : 문자열 인스턴스의 불필요한 생성 피하기
비효율적인 예
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 객체를 재사용할 수 있게 한다.
결론 : 기존 객체를 재사용해야 한다면 새로운 객체를 만들지 마라.
'이펙티브 자바' 카테고리의 다른 글
[이펙티브 자바] 아이템 8. finalizer와 cleaner 사용을 피하라 (0) | 2024.03.11 |
---|---|
[이펙티브 자바] 아이템 7. 다 쓴 객체 참조를 해제하라 (0) | 2024.03.11 |
[이펙티브 자바] 아이템 5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 (0) | 2024.03.11 |
[이펙티브 자바] 아이템 4. 인스턴스화를 막으려거든 private 생성자를 사용하라 (0) | 2024.03.11 |
[이펙티브 자바] 아이템 3. private 생성자나 열거 타입으로 싱글턴임을 보증하라 (0) | 2024.03.11 |