
아이템 6: 불필요한 객체 생성을 피하라
- 핵심 개념
똑같은 기능의 객체를 매번 새로 생성하지 말고, 하나를 재사용하자는 원칙입니다. 특히 반복문 안에서 주의해야 합니다.
- 장점
- 성능이 향상되고, 가비지 컬렉터의 부담을 줄여줍니다.
- 단점
코드를 약간 더 신경 써야 하지만, 성능 향상 폭이 크다면 가치가 있습니다.
💡 예제 비교
❌ 잘못된 예
// 1. 비싼 객체를 반복해서 생성하는 경우
public boolean isRomanNumeral(String s) {
// matches는 내부적으로 매번 Pattern 객체를 생성하고 버림. 매우 비효율적.
return s.matches("^(?=.)M*(C[MD]|D?C{0,3})(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})$");
}
// 2. 불필요한 오토박싱
Long sum = 0L;
for (long i = 0; i <= Integer.MAX_VALUE; i++) {
// 반복문이 돌 때마다 불필요한 Long 객체가 계속 생성됨
sum += i;
}
⭕ 잘된 예
// 1. 비싼 객체는 한 번만 생성하여 재사용
public class RomanNumerals {
// Pattern 객체는 비싸므로 static final로 캐싱하여 재사용
private static final Pattern ROMAN = Pattern.compile(
"^(?=.)M*(C[MD]|D?C{0,3})(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})$");
public static boolean isRomanNumeral(String s) {
return ROMAN.matcher(s).matches();
}
}
// 2. 기본 타입을 사용하여 오토박싱 피하기
long sum = 0L; // Long 대신 long 사용
for (long i = 0; i <= Integer.MAX_VALUE; i++) {
sum += i;
}
'Language > Java' 카테고리의 다른 글
| Effective Java 2장 - Item8: finalizer와 cleaner 사용을 피하라 (0) | 2025.06.15 |
|---|---|
| Effective Java 2장 - Item7: 다 쓴 객체 참조를 해제하라 (0) | 2025.06.15 |
| Effective Java 2장 - Item4: 인스턴스화를 막으려거든 private 생성자를 사용하라 (0) | 2025.06.15 |
| Effective Java 2장 - Item3: private 생성자나 열거 타입으로 싱글턴임을 보증하라 (0) | 2025.06.15 |
| Effective Java 2장 - Item2: 생성자에 매개변수가 많다면 빌더를 고려하라 (1) | 2025.06.10 |