Chapter 12 ์ง๋ ฌํ
๊ฐ์ฒด์ ์ง๋ ฌํ๋ ์๋ฐ๊ฐ ๊ฐ์ฒด๋ฅผ ๋ฐ์ดํธ ์คํธ๋ฆผ์ผ๋ก ์ธ์ฝ๋ฉ (์ง๋ ฌํ) ํ๊ณ ๊ทธ ๋ฐ์ดํธ ์คํธ๋ฆผ์ผ๋ก ๋ถํฐ ๋ค์ ๊ฐ์ฒด๋ฅผ ์ฌ๊ตฌ์ฑ (์ญ์ง๋ ฌํ) ํ๋ ๋ฉ์ปค๋์ฆ์ด๋ค.
์ง๋ ฌํ๋ ๊ธฑ์ฒด๋ ๋ค๋ฅธ VM ์ ์ ์กํ๊ฑฐ๋ ๋์คํฌ์ ์ ์ฅํ ํ ๋์ค์ ์ญ์ง๋ ฌํ๋ฅผ ํ ์ ์๋ค.
Item 85 ์๋ฐ ์ง๋ ฌํ์ ๋์์ ์ฐพ์ผ๋ผ
์ง๋ ฌํ์ ์ํ์ ํํผํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ์๋ฌด๊ฒ๋ ์ญ์ง๋ ฌํํ์ง ์๋๊ฒ์ด๋ค.
์ ๋ขฐํ ์ ์๋ ๋ฐ์ดํฐ๋ ์ ๋ ์ญ์ง๋ ฌํ ํ์ง ์๋ ๊ฒ์ด๋ค.
์ง๋ ฅํ๋ฅผ ํผํ ์ ์๊ณ ์ญ์ง๋ ฌํํ ๋ฐ์ดํฐ๊ฐ ์์ ํ์ง ์์ ํ ํ์ ํ ์ ์๋ค๋ฉด ๊ฐ์ฒด ์ญ์ง๋ ฌํ ํํฐ๋ง (java.io.ObjectInputFilter
) ๋ฅผ ์ฌ์ฉํ์
์ด๋ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ด ์ญ์ง๋ ฌํ ๋๊ธฐ ์ ์ ํํฐ๋ฅผ ์ค์นํ๋ ๊ธฐ๋ฅ์ด๋ค.
๋ธ๋๋ฆฌ์คํธ ๋ณด๋ค๋ ํ์ดํธ๋ฆฌ์คํธ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ์.
Item 86 Serializable์ ๊ตฌํํ ์ง๋ ์ ์คํ ๊ฒฐ์ ํ๋ผ
ํน์ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์ง๋ ฌํํ ์ ์๊ฒ ํ๋ ค๋ฉด ํด๋์ค ์ ์ธ์ implements Serializable
๋ง ๋ง๋ถ์ด๋ฉด ๋๋ค.
๋๋ฌด ์ฝ๊ฒ ์ ์ฉ๊ฐ๋ฅ ํ์ง๋ง ํฐ ๋ฌธ์ ์ ์ด ์๋ค.
Serializable
์ ๊ตฌํ ์ดํ ๋ฆด๋ฆฌ์ฆํ ๋ค์๋ ์์ ํ๊ธฐ ์ด๋ ต๋ค
์์์ฉ์ผ๋ก ์ค๊ณ๋ ํด๋์ค๋ ๋๋ถ๋ถ Serializable
์ ๊ตฌํํ๋ฉด ์๋๋ฉฐ, ์ธํฐํ์ด์ค๋ ๋๋ถ๋ถ Serializable
์ ํ์ฅํด์๋ ์๋๋ค.
Item 87 ์ปค์คํ ์ง๋ ฌํ ํํ๋ฅผ ๊ณ ๋ คํด๋ณด๋ผ
๋จผ์ ๊ณ ๋ฏผํด๋ณด๊ณ ๊ด์ฐฎ๋ค๊ณ ํ๋จ๋ ๋๋ง ๊ธฐ๋ณธ ์ง๋ ฌํ ํํ๋ฅผ ์ฌ์ฉํ๋ผ.
์ง๋ ฌํ์ ํํ๋ ์ ์ฐ์ฑ, ์ฑ๋ฅ, ์ ํ์ฑ ์ธก๋ฉด์์ ์ ์คํ ๊ณ ๋ฏผํ ํ ํฉ๋นํ ๋๋ง ์ฌ์ฉํด์ผ ํ๋ค.
๊ฐ์ฒด์ ๋ฌผ๋ฆฌ์ ํํ๊ณผ ๋ ผ๋ฆฌ์ ๋ด์ฉ์ด ๊ฐ๋ค๋ฉด ๊ธฐ๋ณธ ์ง๋ ฅํ ํํ๋ผ๋ ๋ฌด๋ฐฉํ๋ค.
๋ง์ฝ ๊ฐ์ฒด์ ๋ฌผ๋ฆฌ์ ํํ๊ณผ ๋ ผ๋ฆฌ์ ๋ด์ฉ์ด ํฌ๊ฒ ์์ดํ๋ค๋ฉด ๊ธฐ๋ณธ ์ง๋ ฌํ ํํ๋ฅผ ์ฌ์ฉํ์๊ฒฝ์ฐ ๋ฌธ์ ๋ ๋ค์๊ณผ ๊ฐ๋ค.
- ๊ณต๊ฐ API ๊ฐ ํ์ฌ์ ๋ด๋ถ ํํ ๋ฐฉ์์ ์๊ตฌํ ๋ฌถ์ธ๋ค.
- ๋๋ฌด ๋ง์ ๊ณต๊ฐ์ ์ฐจ์งํ ์ ์๋ค.
- ์๊ฐ์ด ๋๋ฌด ๋ง์ด ๊ฑธ๋ฆฌ์ ์๋ค.
- ์คํ์ค๋ฒํ๋ก๋ฅผ ์ผ์ดํฌ ์ ์๋ค.
์ด๋ค ์ง๋ ฌํ ํํ๋ฅผ ํํ๋ ์ง๋ ฌํ ๊ฐ๋ฅ ํด๋์ค์ ๋ชจ๋ ์ง๋ ฌ ๋ฒ์ ์ UID๋ฅผ ๋ช ์์ ์ผ๋ก ๋ถ์ฌํ์
๊ตฌ๋ฒ์ ์ผ๋ก ์ง๋ ฌํ๋ ์ธ์คํด์ค๋ค๊ณผ์ ํธํ์ฑ์ ๋์ผ๋ ค๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ๋ ์ง๋ ฌ๋ฒ์ UID ๋ฅผ ์ ๋ ์์ ํ์ง ๋ง๋ผ
Item 88 readObject ๋ฉ์๋๋ ๋ฐฉ์ด์ ์ผ๋ก ์์ฑํ๋ผ
private
์ด์ฌ์ผ ํ๋ ๊ฐ์ฒด ์ฐธ์กฐ ํ๋๋ ๊ฐ ํ๋๊ฐ ๊ฐ๋ฅดํค๋ ๊ฐ์ฒด๋ฅผ ๋ฐฉ์ด์ ์ผ๋ก ๋ณต์ฌํ๋ผ
๋ชจ๋ ๋ถ๋ณ์์ ๊ฒ์ฌํ์ฌ ์ด๊ธ๋๋๊ฒ ๋ฐ๊ฒฌ๋๋ฉด InvalidObjectException ์ ๋์ง๋ค.
๋ฐฉ์ด์ ์ผ๋ก ๋ณต์ฌํ ์ดํ์๋ ๋ฐ๋์ ๋ถ๋ณ์ ๊ฒ์ฌ๊ฐ ๋ค๋ฐ๋ผ์ผ ํ๋ค.
์ญ์ง๋ ฌํ ํ ๊ฐ์ฒด ๊ทธ๋ํ ์ ์ฒด์ ์ ํจ์ฑ์ ๊ฒ์ฌํด์ผ ํ๋ค๋ฉด ObjectInputValidation ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ผ.
์ง์ ์ ํน์ ๊ฐ์ ์ ์ฌ์ ์ ๊ฐ๋ฅํ ๋ฉ์๋๋ ํธ์ถํ์ง ๋ง์.
Item 89 ์ธ์คํด์ค ์๋ฅผ ํต์ ํด์ผ ํ๋ค๋ฉด readResolve ๋ณด๋ค๋ ์ด๊ฑฐํ์ ์ ์ฌ์ฉํ๋ผ
readResolve
๋ฅผ ์ธ์คํด์ค ํต์ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๋ค๋ฉด ๊ฐ์ฒด ์ฐธ์กฐํ์
์ธ์คํด์ค ํ๋๋ ๋ชจ๋ transient ๋ก ์ ์ธํด์ผ ํ๋ค.
๋ถ๋ณ์์ ์งํค๊ธฐ ์ํด ์ธ์คํด์ค๋ฅผ ํต์ ํด์ผ ํ๋ค๋ฉด ๊ฐ๋ฅํ ์ด๊ฑฐ ํ์ ์ ์ฌ์ฉํ์.
์ฌ์์น ์๋ ์ํฉ์์ ์ง๋ ฌํ์ ์ธ์คํด์ค ํต์ ๊ฐ ๋ชจ๋ ํ์ํ๋ค๋ฉด readResolve
๋ฉ์๋๋ฅผ ์์ฑํด ๋ฃ์ด์ผ ํ๊ณ , ๊ทธ ํด๋์ค์์ ๋ชจ๋ ์ฐธ์กฐ ํ์
์ธ์คํด์ค ํ๋๋ฅผ transient
๋ก ์ ์ธํด์ผ ํ๋ค.
Item 90 ์ง๋ ฌํ๋ ์ธ์คํด์ค ๋์ ์ง๋ ฌํ ํ๋ก์ ์ฌ์ฉ์ ๊ฒํ ํ๋ผ
์ 3์๊ฐ ํ์ฅํ ์ ์๋ ํด๋์ค๋ผ๋ฉด ๊ฐ๋ฅํ ํ ์ง๋ ฌํ ํ๋ก์ ํจํด์ ์ฌ์ฉํ์.
์ด ํจํด์ด ์๋ง๋ ์ค์ํ ๋ถ๋ณ์์ ์์ ์ ์ผ๋ก ์ง๋ ฌํ ํด์ฃผ๋ ๊ฐ์ฅ ์ค์ํ ๋ฒ๋ฒ์ด๋ค.