Item 6. Unnecessary Objects

λΆˆν•„μš”ν•œ 객체 생성을 ν”Όν•˜λΌ

λΆˆν•„μš”ν•œ 객체 μƒμ„±μ˜ λŒ€ν‘œ 적인 μ˜ˆλ‘œλŠ” new String("string")이 μžˆλ‹€. λ¦¬ν„°λŸ΄λ‘œ μƒμ„±ν•˜λŠ” 것과 new String("string")으둜 μƒμ„±ν•˜λŠ” 것은 λ™μΌν•œ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•˜μ§€λ§Œ, λΆˆν•„μš”ν•œ μΈμŠ€ν„΄μŠ€κ°€ μƒμ„±λ˜λŠ” λ¬Έμ œκ°€ μžˆλ‹€.

λΆˆν•„μš”ν•œ 객체 생성을 ν”Όν•˜λŠ” 방법 - 정적 μ΄ˆκΈ°ν™”

μ •κ·œν‘œν˜„μ‹μ„ μ‚¬μš©ν•  λ•Œ Pattern μΈμŠ€ν„΄μŠ€λŠ” μ •κ·œν‘œν˜„μ‹μ— ν•΄λ‹Ήν•˜λŠ” μœ ν•œ μƒνƒœ 머신을 λ§Œλ“€κΈ° λ•Œλ¬Έμ— 생성 λΉ„μš©μ΄ λ†’λ‹€. λ•Œλ¬Έμ— 2번과 같이 μ‚¬μš©ν•˜κ²Œ 되면 ν•œ 번 μ‚¬μš©ν•  λ•Œλ§ˆλ‹€ Pattern μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜κ³  λ²„λ €μ§€κ²Œ λ˜μ–΄ λΉ„νš¨μœ¨μ μ΄λ‹€.

class RomanNumerals {
    // 1. μ •κ·œν‘œν˜„μ‹μ„ μ‚¬μš©ν•  λ•Œλ§ˆλ‹€ Pattern μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜μ§€ μ•Šκ³  정적 μ΄ˆκΈ°ν™” λΈ”λ‘μ—μ„œ 생성
    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})$");

    static boolean isRomanNumeral1(String s) {
        return ROMAN.matcher(s).matches();
    }

    // 2. μ •κ·œν‘œν˜„μ‹μ„ μ‚¬μš©ν•  λ•Œλ§ˆλ‹€ Pattern μΈμŠ€ν„΄μŠ€λ₯Ό 생성
    static boolean isRomanNumeral2(String s) {
        return s.matches("^(?=.)M*(C[MD]|D?C{0,3})"
                + "(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})$");
    }
}

1번과 같이 정적 μ΄ˆκΈ°ν™”λ‘œ Pattern μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜λ©΄ ν•œ 번만 μƒμ„±λ˜κ³  μž¬μ‚¬μš©ν•  수 있기 λ•Œλ¬Έμ— νš¨μœ¨μ μ΄λ‹€.

λΆˆν•„μš”ν•œ 객체 μƒμ„±μ˜ 예 - μ˜€ν†  λ°•μ‹±(auto boxing)

μ˜€ν†  박싱은 κΈ°λ³Έ νƒ€μž…κ³Ό λ°•μ‹±λœ κΈ°λ³Έ νƒ€μž…μ˜ 차이λ₯Ό νλ €μ£Όμ§€λ§Œ, μ™„μ „νžˆ μ—†μ• μ£Όμ§€λŠ” λͺ»ν•œλ‹€. λ•Œλ¬Έμ— μ˜€ν†  박싱을 μ‚¬μš©ν•˜λ©΄ λΆˆν•„μš”ν•œ 객체가 μƒμ„±λ˜κ³  μ„±λŠ₯에 큰 영ν–₯을 λ―ΈμΉ  수 μžˆλ‹€.

class Sum {
    // 1. Do not use autoboxing
    long sum1() {
        long sum = 0L;
        for (long i = 0; i <= Integer.MAX_VALUE; i++) {
            sum += i;
        }
        return sum;
    }

    // 2. Use autoboxing
    Long sum2() {
        Long sum = 0L;
        for (long i = 0; i <= Integer.MAX_VALUE; i++) {
            sum += i;
        }
        return sum;
    }
}
// ** μ‹€μ œλ‘œ λ‘œμ»¬μ—μ„œ μ‹€ν–‰ν–ˆμ„ λ•ŒλŠ” 두 연산에 큰 μ‹œκ°„ μ°¨μ΄λŠ” μ—†μ—ˆλ‹€. **

Last updated