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?