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

Was this helpful?