ITEM 6: Avoid Unnecessary Object
๋๊ฐ์ ๊ธฐ๋ฅ์ ๊ฐ์ฒด๋ฅผ ๋งค๋ฒ ์์ฑํ๋ ๊ฒ๋ณด๋ค ๊ฐ์ฒด ํ๋๋ฅผ ์์ฑํ์ฌ ์ฌ์ฌ์ฉํ๋ ํธ์ด ์ข์ ๋๊ฐ ๋ง๋ค. ํนํ ๋ถ๋ณ ๊ฐ์ฒด(item 17)๋ ์ธ์ ๋ ์ง ์ฌ์ฌ์ฉํ ์ ์๋ค.
์์ ๋ฌธ์ฅ์ ์คํ๋ ๋๋ง๋ค String ์ธ์คํด์ค๋ฅผ ์๋ก ๋ง๋ค๋ฉฐ, ์ด ๋ฌธ์ฅ์ด ๋ฐ๋ณต๋ฌธ์ด๋ ๋น๋ฒํ ํธ์ถ๋๋ ๋ฉ์๋ ์์ ์๋ค๋ฉด, String ์ธ์คํด์ค๊ฐ ์์์ด ๋ง์ด ๋ง๋ค์ด ์ง ์ ์๋ค.
์์ ๊ฒฝ์ฐ ์๋ก์ด ์ธ์คํด์ค๋ฅผ ๋งค๋ฒ ๋ง๋๋ ๋์ ํ๋์ ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํ๋ฉฐ, ๊ฐ์ ๊ฐ์ ๋จธ์ ์์์ ๋๊ฐ์ ๋ฌธ์์ด ๋ฆดํฐ๋ด์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ชจ๋ ์ฝ๋๊ฐ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฌ์ฉํจ์ด ๋ณด์ฅ๋๋ค.
์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋-item1๋ฅผ ์ ๊ณตํ๋ ๋ถ๋ณ ํด๋์ค์์๋ ๋ถํ์ํ ๊ฐ์ฒด ์์ฑ์ ํผํ ์ ์๋ค.
์์ฑ์๋ ๋งค๋ฒ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง๋ง, ํฉํฐ๋ฆฌ ๋ฉ์๋๋ ๊ทธ๋ ์ง ์์ผ๋ฏ๋ก, Boolean(String)
์์ฑ์ ๋์ Boolean.valuesOf(String)
ํฉํฐ๋ฆฌ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
์ ๊ท ํํ์์ ํ์ฉํด ์ ํจํ ๋ก๋ง ์ซ์์ธ์ง ํ์ธํ๋ ๋ฉ์๋์ด๋ค. ํ์ง๋ง ์ด ๋ฐฉ์์ String.matches
๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค๋ ๋ฌธ์ ์ ์ด ์๋ค.
String.matches
๋ฉ์๋ ๋ด๋ถ์์ ๋ง๋๋ ์ ๊ทํํ์์ฉ Pattern
์ธ์คํด์ค๋ ํ ๋ฒ ์ฐ๊ณ ๋ฒ๋ ค์ ธ ๊ณง ๋ฐ๋ก ๊ฐ๋น์ง ์ปฌ๋ ์
๋์์ด ๋๋ค. Pattern
์ ์
๋ ฅ๋ฐ์ ์ ๊ทํํ์์ ํด๋นํ๋ ์ ํ ์ํ ๋จธ์ (finite state machine)์ ๋ง๋ค์ด ์ธ์คํด์ค ์์ฑ ๋น์ฉ์ด ๋๋ค.
finite state machine ์ด๋
์ํ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ ๊ฐ๋ ์ ๋ฐฉ์์ผ๋ก, ์ํ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฒ๋ฆฌ๋๊ธฐ ๋๋ฌธ์ ํ ๋ฒ์ ํ ๊ฐ์ ์ํ๋ง ์ฒ๋ฆฌ๋๋ค. ์ํ์ ๊ธฐ๋ฐํ ์กฐ๊ฑด์ ์ํด ์ฒ๋ฆฌ๋๋ฏ๋ก, ์ํ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ์ํ์ ๋ํ ์ข ๋ฃ ๋ฐ ๋ค๋ฅธ ์ํ๋ก์ ๋ณํ์ ์ฒ๋ฆฌํ๋ค.
์ด๋ ๊ฒ ์์ฑ ๋น์ฉ์ด ๋ง์ด ๋๋ ๊ฐ์ฒด๊ฐ ๋ฐ๋ณตํด์ ํ์ํ๋ค๋ฉด, ์บ์ฑํ์ฌ ์ฌ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํ๋ค.
๋ถ๋ณ์ธ Pattern ์ธ์คํด์ค๋ฅผ ํด๋์ค ์ด๊ธฐํ ๊ณผ์ ์์ ์ง์ ์์ฑํด ์บ์ฑํด๋๊ณ , ๋์ค์ isRomanNumeral
๋ฉ์๋ ํธ์ถ์ ํตํด ์ด ์ธ์คํด์ค๋ฅผ ์ฌ์ฌ์ฉํ์ฌ ์ฑ๋ฅ์ ๊ฐ์ ํ ์ ์๋ค.
ํ์ง๋ง, ํด๋์ค๊ฐ ์ด๊ธฐํ๋ ํ ์ด ๋ฉ์๋๋ฅผ ํ ๋ฒ๋ ํธ์ถํ์ง ์๋๋ค๋ฉด, ROMAN
ํ๋๋ ํ์์์ด ์ด๊ธฐํ ๋ ๊ฒ์ด๋ค. lazy initialization(item 83) ์ผ๋ก isRomanNumeral
๋ฉ์๋๊ฐ ์ฒ์์ผ๋ก ํธ์ถ๋ ๋ ํ๋๋ฅผ ์ด๊ธฐํํ๋๋ก ํ์ฌ ๋ถํ์ํ ์ด๊ธฐํ๋ฅผ ์์จ ์ ์์ง๋ง, ์ง์ฐ ์ด๊ธฐํ๋ ์ฝ๋๋ฅผ ๋ณต์กํ๊ฒ ๋ง๋๋๋ฐ, ์ฑ๋ฅ์ ํฌ๊ฒ ๊ฐ์ ๋์ง ์์ ๋๊ฐ ๋ง์ผ๋ฏ๋ก ๊ถํ์ง ์๋๋ค.(item 67)
Map
์ธํฐํ์ด์ค์ KeySet
๋ฉ์๋๋ Map
๊ฐ์ฒด ์์ ๋ชจ๋ ํค ๊ฐ์ ๋ด์ Set
๋ทฐ๋ฅผ ๋ฐํํ๋ค. KeySet
ํธ์ถ์ ์๋ก์ด Set
์ธ์คํด์ค๊ฐ ๋ง๋ค์ด์ง๋ค๊ณ ์๊ฐํ ์ ์์ง๋ง, ์ฌ์ค์ ๋งค๋ฒ ๋์ผํ Set
์ธ์คํด์ค๋ฅผ ๋ฐํํ ์๋ ์๋ค. ๋ฐํ๋ Set
์ธ์คํด์ค๊ฐ ์ผ๋ฐ์ ์ผ๋ก ๊ฐ๋ณ์ด๋๋ผ๋ ๋ฐํ๋ ์ธ์คํด์ค๋ค์ ๊ธฐ๋ฅ์ ์ผ๋ก ๋ชจ๋ ๋์ผํ๋ฉฐ, ๋ฐํ๋ ๊ฐ์ฒด ์ค ํ๋๋ฅผ ์์ ํ๋ฉด ๋ชจ๋ ๊ฐ์ฒด๊ฐ ๋์ผํ Map
์ ๋๋ณํ๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๊ฐ์ฒด๊ฐ ๋ฐ๋ผ์ ๋ฐ๋๋ค. KeySet
๋ทฐ ๊ฐ์ฒด๋ฅผ ์ฌ๋ฌ ๊ฐ ์์ฑํด๋ ๋์ง๋ง, ๊ทธ๋ด ํ์๋ ์๋ค.
๋ ๋ค๋ฅธ ์๋ก auto boxing์ ๋ค ์ ์๋ค. auto boxing์ ๊ธฐ๋ณธ ํ์ ๊ณผ ๋ฐ์ฑ๋ ๊ธฐ๋ณธ ํ์ ์ ์์ด ์ธ ๋ ์๋์ผ๋ก ์ํธ ๋ณํํด์ฃผ๋ ๊ธฐ์ ์ด๋ค. ์คํต ๋ฐ์ฑ์ ๊ธฐ๋ณธ ํ์ ๊ณผ ๊ทธ์ ๋์ํ๋ ๋ฐ์ฑ๋ ๊ธฐ๋ณธ ํ์ ์ ๊ตฌ๋ถ์ ํ๋ ค์ฃผ์ง๋ง, ์์ ํ ์์ ์ฃผ๋ ๊ฒ์ ์๋๋ค.
์ ์ฝ๋๋ ๋ชจ๋ ์ ์์ ์ด ํฉ์ ๊ตฌํ๋ ๋ฉ์๋๋ก, int๋ฅผ ์ฌ์ฉํ์ง ์๊ณ long์ ์ฌ์ฉํ๊ณ ์๋ค. ์ ํํ ๋ต์ ๋ผ ์๋ ์์ง๋ง, ์ ๋๋ก ๊ตฌํํ์์ ๋๋ณด๋ค ์ฑ๋ฅ์์ผ๋ก ํจ์ฌ ๋๋ ค์ง๋ค. sum ๋ณ์๋ฅผ long
์ด ์๋ Long
์ผ๋ก ์ ์ธํ์ฌ ๋ถํ์ํ ์ธ์คํด์ค๊ฐ sum += i
์ฐ์ฐ์ด ์ด๋ฃจ์ด์ง ๋๋ง๋ค ์์ฑ๋๋ ๊ฒ์ด๋ค. ๋จ์ํ sum์ ํ์
์ long
์ผ๋ก๋ง ๋ณ๊ฒฝํด์ฃผ์ด๋ ์ฑ๋ฅ์ด ๊ฐ์ ๋๋ค. ์ฆ, ๋ฐ์ฑ๋ ๊ธฐ๋ณธ ํ์
๋ณด๋ค๋ ๊ธฐ๋ณธ ํ์
์ ์ฌ์ฉํ๊ณ , ์๋์น ์์ ์คํ ๋ฐ์ฑ์ด ์จ์ด๋ค์ง ์๋๋ก ์ฃผ์ํด์ผ ํ๋ค.
์ค์ ๋ก ์ํ์ ๊ฐ๊ฒฉ์ ๊ณ์ฐํ ๋ ์๋์น ์์ auto boxing์ด ํํ ๋ฐ์ํ๋ค. ๊ฐ๊ฒฉ ํ๋์ ๋ํ ํ์
์ผ๋ก BigDecimal
์ ์ฃผ๋ก ์ฌ์ฉํ๋๋ฐ BigDecimal
๋ด๋ถ ๋ฉ์๋๋ ๊ธฐ๋ณธํ์
์ ์ฌ์ฉํ๊ณ ์๋ค.
์ด๋ BigDecimal.longValue()
๋ก ์ฐ์ฐ์ ํ๊ณ ์ถ๋ค๋ฉด, ๊ธฐ๋ณธ ํ์
์ ์ฌ์ฉํด์ผํ๋ฉฐ, ๊ทธ๋ ์ง ์๋ค๋ฉด ๋ถํ์ํ ์ธ์คํด์ค๊ฐ ์์ฑ๋ ๊ฒ์ด๋ค.
ํ๋ก๊ทธ๋จ์ ๋ช ํ์ฑ, ๊ฐ๊ฒฐ์ฑ, ๊ธฐ๋ฅ์ ์ํด ๊ฐ์ฒด๋ฅผ ์ถ๊ฐ๋ก ์์ฑํ๋ ๊ฒ์ด๋ผ๋ฉด ์ผ๋ฐ์ ์ผ๋ก ์ข์ ์ผ์ด๋ค. ๋ถํ์ํ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ฒ์ ํผํ๊ณ ์ ๊ฐ์ฒด ํ(pool)์ ์์ฑํ๋ ๊ฒ์ ๊ถ์ฅํ์ง ์๋๋ค. ์์ฒด ๊ฐ์ฒด ํ์ ์ฝ๋๋ฅผ ํท๊ฐ๋ฆฌ๊ฒ ๋ง๋ค๋ฉฐ, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๋๋ฆฌ๊ณ ์ฑ๋ฅ์ ๋จ์ด๋จ๋ฆฐ๋ค. JVM์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ ์๋นํ ์ต์ ํ๊ฐ ์๋์ด์์ด ์ง์ ๋ง๋ ๊ฐ์ฒด ํ๋ณด๋ค ํจ์ฌ ๋น ๋ฅธ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ๋ฐฉ์ด์ ๋ณต์ฌ๊ฐ ํ์ํ ์ํฉ์์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฌ์ฉํ์ ๋์ ํผํด๊ฐ ํ์ ์๋ ๊ฐ์ฒด๋ฅผ ๋ฐ๋ณต ์์ฑํ์ ๋์ ํผํด๋ณด๋ค ํจ์ฌ ํฐ ๊ฒ์ ์ ์ํด์ผํ๋ค.
Last updated