Chapter 12 ์ง๋ ฌํ™”

๊ฐ์ฒด์˜ ์ง๋ ฌํ™”๋ž€ ์ž๋ฐ”๊ฐ€ ๊ฐ์ฒด๋ฅผ ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ์œผ๋กœ ์ธ์ฝ”๋”ฉ (์ง๋ ฌํ™”) ํ•˜๊ณ  ๊ทธ ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ถ€ํ„ฐ ๋‹ค์‹œ ๊ฐ์ฒด๋ฅผ ์žฌ๊ตฌ์„ฑ (์—ญ์ง๋ ฌํ™”) ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด๋‹ค.

์ง๋ ฌํ™”๋œ ๊ธฑ์ฒด๋Š” ๋‹ค๋ฅธ VM ์— ์ „์†กํ•˜๊ฑฐ๋‚˜ ๋””์Šคํฌ์— ์ €์žฅํ•œ ํ›„ ๋‚˜์ค‘์— ์—ญ์ง๋ ฌํ™”๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

Item 85 ์ž๋ฐ” ์ง๋ ฌํ™”์˜ ๋Œ€์•ˆ์„ ์ฐพ์œผ๋ผ

์ง๋ ฌํ™”์˜ ์œ„ํ—˜์„ ํšŒํ”ผํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์•„๋ฌด๊ฒƒ๋„ ์—ญ์ง๋ ฌํ™”ํ•˜์ง€ ์•Š๋Š”๊ฒƒ์ด๋‹ค.

์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ๋ฐ์ดํ„ฐ๋Š” ์ ˆ๋Œ€ ์—ญ์ง๋ ฌํ™” ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด๋‹ค.

์ง๋ ฅํ™”๋ฅผ ํ”ผํ• ์ˆ˜ ์—†๊ณ  ์—ญ์ง๋ ฌํ™”ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์•ˆ์ „ํ•œ์ง€ ์™„์ „ํžˆ ํ™•์‹ ํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ๊ฐ์ฒด ์—ญ์ง๋ ฌํ™” ํ•„ํ„ฐ๋ง (java.io.ObjectInputFilter) ๋ฅผ ์‚ฌ์šฉํ•˜์ž
์ด๋Š” ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์ด ์—ญ์ง๋ ฌํ™” ๋˜๊ธฐ ์ „์— ํ•„ํ„ฐ๋ฅผ ์„ค์น˜ํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.

๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ๋ณด๋‹ค๋Š” ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜์ž.

Item 86 Serializable์„ ๊ตฌํ˜„ํ• ์ง€๋Š” ์‹ ์ค‘ํžˆ ๊ฒฐ์ •ํ•˜๋ผ

ํŠน์ • ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ง๋ ฌํ™”ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋ ค๋ฉด ํด๋ž˜์Šค ์„ ์–ธ์— implements Serializable ๋งŒ ๋ง๋ถ™์ด๋ฉด ๋œ๋‹ค.

๋„ˆ๋ฌด ์‰ฝ๊ฒŒ ์ ์šฉ๊ฐ€๋Šฅ ํ•˜์ง€๋งŒ ํฐ ๋ฌธ์ œ์ ์ด ์žˆ๋‹ค.

Serializable ์„ ๊ตฌํ˜„ ์ดํ›„ ๋ฆด๋ฆฌ์ฆˆํ•œ ๋’ค์—๋Š” ์ˆ˜์ •ํ•˜๊ธฐ ์–ด๋ ต๋‹ค

์ƒ์†์šฉ์œผ๋กœ ์„ค๊ณ„๋œ ํด๋ž˜์Šค๋Š” ๋Œ€๋ถ€๋ถ„ Serializable ์„ ๊ตฌํ˜„ํ•˜๋ฉด ์•ˆ๋˜๋ฉฐ, ์ธํ„ฐํŽ˜์ด์Šค๋„ ๋Œ€๋ถ€๋ถ„ Serializable ์„ ํ™•์žฅํ•ด์„œ๋„ ์•ˆ๋œ๋‹ค.

Item 87 ์ปค์Šคํ…€ ์ง๋ ฌํ™” ํ˜•ํƒœ๋ฅผ ๊ณ ๋ คํ•ด๋ณด๋ผ

๋จผ์ € ๊ณ ๋ฏผํ•ด๋ณด๊ณ  ๊ดœ์ฐฎ๋‹ค๊ณ  ํŒ๋‹จ๋  ๋•Œ๋งŒ ๊ธฐ๋ณธ ์ง๋ ฌํ™” ํ˜•ํƒœ๋ฅผ ์‚ฌ์šฉํ•˜๋ผ.

์ง๋ ฌํ™”์˜ ํ˜•ํƒœ๋Š” ์œ ์—ฐ์„ฑ, ์„ฑ๋Šฅ, ์ •ํ™•์„ฑ ์ธก๋ฉด์—์„œ ์‹ ์ค‘ํžˆ ๊ณ ๋ฏผํ•œ ํ›„ ํ•ฉ๋‹นํ•  ๋•Œ๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

๊ฐ์ฒด์˜ ๋ฌผ๋ฆฌ์  ํ‘œํ˜„๊ณผ ๋…ผ๋ฆฌ์  ๋‚ด์šฉ์ด ๊ฐ™๋‹ค๋ฉด ๊ธฐ๋ณธ ์ง๋ ฅํ™” ํ˜•ํƒœ๋ผ๋„ ๋ฌด๋ฐฉํ•˜๋‹ค.

๋งŒ์•ฝ ๊ฐ์ฒด์˜ ๋ฌผ๋ฆฌ์  ํ‘œํ˜„๊ณผ ๋…ผ๋ฆฌ์  ๋‚ด์šฉ์ด ํฌ๊ฒŒ ์ƒ์ดํ•˜๋‹ค๋ฉด ๊ธฐ๋ณธ ์ง๋ ฌํ™” ํ˜•ํƒœ๋ฅผ ์‚ฌ์šฉํ–ˆ์„๊ฒฝ์šฐ ๋ฌธ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ๊ณต๊ฐœ API ๊ฐ€ ํ˜„์žฌ์˜ ๋‚ด๋ถ€ ํ‘œํ˜„ ๋ฐฉ์‹์— ์˜๊ตฌํžˆ ๋ฌถ์ธ๋‹ค.
  2. ๋„ˆ๋ฌด ๋งŽ์€ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  3. ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ๋งŽ์ด ๊ฑธ๋ฆฌ์ˆ˜ ์žˆ๋‹ค.
  4. ์Šคํƒ์˜ค๋ฒ„ํ”Œ๋กœ๋ฅผ ์ผ์ดํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

์–ด๋–ค ์ง๋ ฌํ™” ํ˜•ํƒœ๋ฅผ ํƒํ•˜๋“  ์ง๋ ฌํ™” ๊ฐ€๋Šฅ ํด๋ž˜์Šค์— ๋ชจ๋‘ ์ง๋ ฌ ๋ฒ„์ „์˜ UID๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๋ถ€์—ฌํ•˜์ž

๊ตฌ๋ฒ„์ „์œผ๋กœ ์ง๋ ฌํ™”๋œ ์ธ์Šคํ„ด์Šค๋“ค๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ๋Š์œผ๋ ค๋Š” ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ์ง๋ ฌ๋ฒ„์ „ UID ๋ฅผ ์ ˆ๋Œ€ ์ˆ˜์ •ํ•˜์ง€ ๋ง๋ผ

Item 88 readObject ๋ฉ”์„œ๋“œ๋Š” ๋ฐฉ์–ด์ ์œผ๋กœ ์ž‘์„ฑํ•˜๋ผ

private ์ด์—ฌ์•ผ ํ•˜๋Š” ๊ฐ์ฒด ์ฐธ์กฐ ํ•„๋“œ๋Š” ๊ฐ ํ•„๋“œ๊ฐ€ ๊ฐ€๋ฅดํ‚ค๋Š” ๊ฐ์ฒด๋ฅผ ๋ฐฉ์–ด์ ์œผ๋กœ ๋ณต์‚ฌํ•˜๋ผ

๋ชจ๋“  ๋ถˆ๋ณ€์‹์„ ๊ฒ€์‚ฌํ•˜์—ฌ ์–ด๊ธ‹๋‚˜๋Š”๊ฒŒ ๋ฐœ๊ฒฌ๋˜๋ฉด InvalidObjectException ์„ ๋˜์ง„๋‹ค.

๋ฐฉ์–ด์ ์œผ๋กœ ๋ณต์‚ฌํ•œ ์ดํ›„์—๋Š” ๋ฐ˜๋“œ์‹œ ๋ถˆ๋ณ€์‹ ๊ฒ€์‚ฌ๊ฐ€ ๋’ค๋”ฐ๋ผ์•ผ ํ•œ๋‹ค.

์—ญ์ง๋ ฌํ™” ํ›„ ๊ฐ์ฒด ๊ทธ๋ž˜ํ”„ ์ „์ฒด์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•ด์•ผ ํ•œ๋‹ค๋ฉด ObjectInputValidation ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ผ.

์ง์ ‘์  ํ˜น์€ ๊ฐ„์ ‘์  ์žฌ์ •์˜ ๊ฐ€๋Šฅํ•œ ๋ฉ”์„œ๋“œ๋Š” ํ˜ธ์ถœํ•˜์ง€ ๋ง์ž.

Item 89 ์ธ์Šคํ„ด์Šค ์ˆ˜๋ฅผ ํ†ต์ œํ•ด์•ผ ํ•œ๋‹ค๋ฉด readResolve ๋ณด๋‹ค๋Š” ์—ด๊ฑฐํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋ผ

readResolve ๋ฅผ ์ธ์Šคํ„ด์Šค ํ†ต์ œ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๊ฐ์ฒด ์ฐธ์กฐํƒ€์ž… ์ธ์Šคํ„ด์Šค ํ•„๋“œ๋Š” ๋ชจ๋‘ transient ๋กœ ์„ ์–ธํ•ด์•ผ ํ•œ๋‹ค.

๋ถˆ๋ณ€์‹์„ ์ง€ํ‚ค๊ธฐ ์œ„ํ•ด ์ธ์Šคํ„ด์Šค๋ฅผ ํ†ต์ œํ•ด์•ผ ํ•œ๋‹ค๋ฉด ๊ฐ€๋Šฅํ•œ ์—ด๊ฑฐ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜์ž.

์—ฌ์˜์น˜ ์•Š๋Š” ์ƒํ™ฉ์—์„œ ์ง๋ ฌํ™”์™€ ์ธ์Šคํ„ด์Šค ํ†ต์ œ๊ฐ€ ๋ชจ๋‘ ํ•„์š”ํ•˜๋‹ค๋ฉด readResolve ๋ฉ”์„œ๋“œ๋ฅผ ์ž‘์„ฑํ•ด ๋„ฃ์–ด์•ผ ํ•˜๊ณ , ๊ทธ ํด๋ž˜์Šค์—์„œ ๋ชจ๋“  ์ฐธ์กฐ ํƒ€์ž… ์ธ์Šคํ„ด์Šค ํ•„๋“œ๋ฅผ transient ๋กœ ์„ ์–ธํ•ด์•ผ ํ•œ๋‹ค.

Item 90 ์ง๋ ฌํ™”๋œ ์ธ์Šคํ„ด์Šค ๋Œ€์‹  ์ง๋ ฌํ™” ํ”„๋ก์‹œ ์‚ฌ์šฉ์„ ๊ฒ€ํ† ํ•˜๋ผ

์ œ 3์ž๊ฐ€ ํ™•์žฅํ•  ์ˆ˜ ์—†๋Š” ํด๋ž˜์Šค๋ผ๋ฉด ๊ฐ€๋Šฅํ•œ ํ•œ ์ง๋ ฌํ™” ํ”„๋ก์‹œ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์ž.

์ด ํŒจํ„ด์ด ์•„๋งˆ๋„ ์ค‘์š”ํ•œ ๋ถˆ๋ณ€์‹์„ ์•ˆ์ •์ ์œผ๋กœ ์ง๋ ฌํ™” ํ•ด์ฃผ๋Š” ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ฒ™๋ฒ•์ด๋‹ค.