๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“š์ฝ์€ ์ฑ… ์ •๋ฆฌ/์ดํŽ™ํ‹ฐ๋ธŒ์ž๋ฐ”

[์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”] 12์žฅ : ์ง๋ ฌํ™”

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

→ ์ด๋ฒˆ ์žฅ์—์„œ๋Š” ์ง๋ ฌํ™”๊ฐ€ ํ’ˆ๊ณ ์žˆ๋Š” ์œ„ํ—˜๊ณผ ๊ทธ์œ„ํ—˜์„ ์ตœ์†Œํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์ž.

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

์—ญ์ง๋ ฌํ™”๋ฅผ ํ•จ๋ถ€๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๊ณต๊ฒฉ์— ๋…ธ์ถœ๋˜๊ฒŒ ๋œ๋‹ค.

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

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ๋กœ์šด ์‹œ์Šคํ…œ์—์„œ ์ž๋ฐ” ์ง๋ ฌํ™”๋ฅผ ์จ์•ผ ํ•  ์ด์œ ๋Š” ์ „ํ˜€ ์—†๋‹ค. (์œ„ํ—˜ํ•˜๋‹ˆ๊นŒ)

→ ๊ฐ์ฒด์™€ ๋ฐ”์ดํŠธ ์‹œํ€€์Šค๋ฅผ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ๋‹ค๋ฅธ ๋งค์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜์ž.

  • ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ ์ง€์›
  • ์šฐ์ˆ˜ํ•œ ์„ฑ๋Šฅ, ํ’๋ถ€ํ•œ ์ง€์› ๋„๊ตฌ
  • ์ž๋ฐ” ์ง๋ ฌํ™”๋ณด๋‹ค ํ›จ์”ฌ ๊ฐ„๋‹จํ•œ ๊ตฌ์กฐ

์ง/์—ญ์ง๋ ฌํ™”๋Œ€์‹  ์†์„ฑ-๊ฐ’ ์Œ ์ง‘ํ•ฉ์œผ๋กœ ๊ตฌ์„ฑ๋œ ๋ฐ์ดํ„ฐ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•จ

⇒ ์ด ๋ฐ์ดํ„ฐ ํ‘œํ˜„์˜ ์„ ๋‘์ฃผ์ž๋Š” ‘JSON’๊ณผ ํ”„๋กœํ† ์ฝœ๋ฒ„ํผ์ด๋‹ค.

๋ ˆ๊ธฐ์‹œ ๋•Œ๋ฌธ์— ์ž๋ฐ” ์ง๋ ฌํ™”๋ฅผ ๋ฐฐ์ œํ•  ์ˆ˜ ์—†์„ ๋•Œ

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

-ํ•ต์‹ฌ์ •๋ฆฌ-

์ง๋ ฌํ™”๋Š” ์œ„ํ—˜ํ•˜๋‹ˆ ํ”ผํ•˜์ž. ๋ฐ‘๋ฐ”๋‹ฅ๋ถ€ํ„ฐ ์„ค๊ณ„ํ•œ๋‹ค๋ฉด JSON ๊ฐ™์€ ๋Œ€์•ˆ์„ ์‚ฌ์šฉํ•˜์ž. ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ์—ญ์ง๋ ฌํ™” ์ž์ œํ•˜์ž.

์•„์ดํ…œ 86 : Serailizable์„ ๊ตฌํ˜„ํ• ์ง€๋Š” ์‹ ์ค‘ํžˆ ๊ฒฐ์ •ํ•˜๋ผ

ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ง๋ ฌํ™” ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด ํด๋ž˜์Šค ์„ ์–ธ์— ‘implements Serializable’๋งŒ ๋ถ™์ด๋ฉด ๋œ๋‹ค. ์ง๋ ฌํ™”๋Š” ๊ฐ„๋‹จํ•ด๋ณด์ด์ง€๋งŒ ํ›จ์”ฌ ๋ณต์žกํ•˜๋ฉฐ, ๊ฐ’๋น„์‹ผ ๋น„์šฉ์ด ์†Œ๋ชจ๋œ๋‹ค.

๋ฌธ์ œ์ 

  • Serializable์„ ๊ตฌํ˜„ํ•˜๋ฉด ๋ฆด๋ฆฌ์Šคํ•œ ๋’ค์—๋Š” ์ˆ˜์ •ํ•˜๊ธฐ ์–ด๋ ต๋‹ค.
    • ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ‘์ง๋ ฌํ™”๋œ ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ ์ธ์ฝ”๋”ฉ’ ๋˜ํ•œ ํ•˜๋‚˜์˜ ๊ณต๊ฐœ API๊ฐ€ ๋œ๋‹ค. (์˜์›ํžˆ ์ง€์›ํ•ด์•ผํ•จ)
    • private๊ณผ package-private ์ธ์Šคํ„ด์Šค ํ•„๋“œ๋“ค๋งˆ์ € API๋กœ ๊ณต๊ฐœ๋˜์–ด ์ง„๋‹ค. (์บก์Šํ™”๊ฐ€ ๊นจ์ง)

์ง๋ ฌํ™” ๊ฐ€๋Šฅ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ ์ž ํ•œ๋‹ค๋ฉด ์ฒ˜์Œ๋ถ€ํ„ฐ ์„ค๊ณ„๋ฅผ ์ž˜ํ•ด์•ผํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๋Ÿฌ๋”๋ผ๋„ ํด๋ž˜์Šค๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ๋ฐ ์ œ์•ฝ์ด ์žˆ๋‹ค....

  • ํด๋ž˜์Šค์˜ ์ด๋ฆ„, ์ธํ„ฐํŽ˜์ด์Šค, ๋ฉ”์„œ๋“œ ๋“ฑ ์ˆ˜์ •/๊ฐœ์„ ์‚ฌํ•ญ์ด ์ƒ๊ธฐ๋ฉด ์ง๋ ฌ๋ฒ„์ „UID๋„ ๋ณ€ํ•œ๋‹ค. ์ฆ‰, ์ž๋™์ƒ์„ฑ๋˜๋Š” ๊ฐ’์— ์˜์กดํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ˜ธํ™˜์„ฑ์ด ๊นจ์ ธ๋ฒ„๋ฆฐ๋‹ค๋Š” ๋œป์ด๋‹ค.
  • Serializable์„ ๊ตฌํ˜„ํ•˜๋ฉด ๋ฒ„๊ทธ์™€ ๋ณด์•ˆ ๊ตฌ๋ฉ์ด ์ƒ๊ธธ ์œ„ํ—˜์ด ๋†’์•„์ง„๋‹ค.
    • ๊ฐ์ฒด๋Š” ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•ด ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๊ธฐ๋ณธ์ธ๋ฐ ์ง๋ ฌํ™”๋Š” ์ด๋ฅผ ์šฐํšŒํ•˜๋Š” ๊ฐ์ฒด ์ƒ์„ฑ ๊ธฐ๋ฒ•์ด๋‹ค. ๋”ฐ๋ผ์„œ “์ƒ์„ฑ์ž์—์„œ ๊ตฌ์ถ•ํ•œ ๋ถˆ๋ณ€์‹์„ ๋ชจ๋‘ ๋ณด์žฅํ•˜๊ณ  ์ƒ์„ฑ ๋„์ค‘ ๊ณต๊ฒฉ์ž๊ฐ€ ๊ฐ์ฒด ๋‚ด๋ถ€๋ฅผ ๋“ค์—ฌ๋‹ค ๋ณผ ์ˆ˜ ์—†๋„๋ก ํ•ด์•ผํ•œ๋‹ค"๋ผ๋Š” ๊ทœ์น™์„ ์ง€์ผœ์•ผ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์—ญ์ง๋ ฌํ™”๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์œ„ํ—˜์— ์‰ฝ๊ฒŒ ๋…ธ์ถœ๋œ๋‹ค.
  • ํ•ด๋‹น ํด๋ž˜์Šค์˜ ์‹ ๋ฒ„์ „์„ ๋ฆด๋ฆฌ์Šคํ•  ๋•Œ ํ…Œ์ŠคํŠธํ•  ๊ฒƒ์ด ๋Š˜์–ด๋‚œ๋‹ค.
    • ๊ตฌ ์ธ์Šคํ„ด์Šค์™€ ์‹  ์ธ์Šคํ„ด์Šค๊ฐ€ ์—ญ/์ง๋ ฌํ™”๊ฐ€ ๊ฐ€๋Šฅํ•œ์ง€ ํ…Œ์ŠคํŠธ ํ•ด๋ณด๊ณ  ์„ฑ๊ณตํ•ด์•ผ ํ•œ๋‹ค.
  • Serializable ๊ตฌํ˜„ ์—ฌ๋ถ€๋Š” ๊ฐ€๋ณ๊ฒŒ ๊ฒฐ์ •ํ•  ์‚ฌ์•ˆ์ด ์•„๋‹ˆ๋‹ค.
    • ๋‹จ, ๊ฐ์ฒด๋ฅผ ์ „์†กํ•˜๊ฑฐ๋‚˜ ์ €์žฅํ•  ๋•Œ ์ž๋ฐ” ์ง๋ ฌํ™”๋ฅผ ์ด์šฉํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์šฉ์œผ๋กœ ๋งŒ๋“  ํด๋ž˜์Šค๋ผ๋ฉด ์„ ํƒ์˜ ์—ฌ์ง€๊ฐ€ ์—†๋‹ค.
    • Serializable ๊ตฌํ˜„์—๋Š” ๋งŽ์€ ๋น„์šฉ์ด ์†Œ๋ชจ๋˜๋ฏ€๋กœ ํด๋ž˜์Šค ์„ค๊ณ„ ์‹œ ์ด๋“๊ณผ ๋น„์šฉ์„ ์ž˜ ์ €์šธ์งˆ ํ•ด์•ผํ•œ๋‹ค.
  • ์ƒ์†์šฉ์œผ๋กœ ์„ค๊ณ„๋œ ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค ๋Œ€๋ถ€๋ถ„์€ Serializable์„ ํ™•์žฅ/๊ตฌํ˜„ํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค.
  • ๋งŒ์•ฝ, ํ™•์žฅ/๊ตฌํ˜„ํ•˜๊ฒŒ๋˜๋ฉด ๊ทธ ํด๋ž˜์Šค์—๊ฒŒ ๋งŽ์€ ๋ถ€๋‹ด์„ ์ฃผ๊ฒŒ ๋œ๋‹ค. ํ•˜์ง€๋งŒ Serializable๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋งŒ ์ง€์›ํ•œ๋‹ค๋ฉด ์„ ํƒ์˜ ์—ฌ์ง€๊ฐ€ ์—†๋‹ค.
  • ๋‚ด๋ถ€ ํด๋ž˜์Šค๋Š” ์ง๋ ฌํ™”๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ๋ง์•„์•ผ ํ•œ๋‹ค

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

์ง๋ ฌํ™”๋ฅผ ๊ตฌํ˜„ํ•˜๊ฒŒ ๋˜๋ฉด ์ดํ›„์—๋„ ๋ฒ„๋ฆด ์ˆ˜ ์—†๊ณ  ์˜์›ํžˆ ๋ฐœ์ด ๋ฌถ์ด๊ฒŒ ๋œ๋‹ค.

์šฐ์„  ๊ณ ๋ฏผํ•ด๋ณด๊ณ  ๊ดœ์ฐฎ๋‹ค๊ณ  ํŒ๋‹จ๋  ๋•Œ๋งŒ ๊ธฐ๋ณธ ์ง๋ ฌํ™”๋ฅผ ์‚ฌ์šฉํ•˜๋ผ. (์œ ์—ฐ์„ฑ, ์„ฑ๋Šฅ, ์ •ํ™•์„ฑ ์ธก๋ฉด์—์„œ ํ•ฉ๋‹นํ•œ์ง€)

  • ๊ฐ์ฒด์˜ ๋ฌผ๋ฆฌ์  ํ‘œํ˜„๊ณผ ๋…ผ๋ฆฌ์  ๋‚ด์šฉ์ด ๊ฐ™๋‹ค๋ฉด ๊ธฐ๋ณธ ์ง๋ ฌํ™” ํ˜•ํƒœ๋ผ๋„ ๋ฌด๋ฐฉํ•˜๋‹ค
    • ๊ธฐ๋ณธ ์ง๋ ฌํ™”๊ฐ€ ๊ฐ€๋Šฅํ•œ ํ›„๋ณด์œ„ ์ฝ”๋“œ๋Š” ์ด๋ฆ„, ์„ฑ, ์ค‘๊ฐ„์ด๋ฆ„์œผ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ ์„ฑ๋ช…์˜ ๋…ผ๋ฆฌ์  ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ์ •ํ™•ํžˆ ๋ฐ˜์˜ํ–ˆ๋‹ค. (ํ›„๋ณด ๊ฐ€๋Šฅ)
      • ์œ„ ์ฝ”๋“œ์—์„œ๋Š” readObject๊ฐ€ ์„ฑ๊ณผ ์ด๋ฆ„์ด null์ด ์•„๋‹˜์„ ๋ณด์žฅํ•ด์•ผ ํ•œ๋‹ค.
      ์œ„ ์ฝ”๋“œ์˜ ํ•„๋“œ๋Š” private์ด์ง€๋งŒ ์ง๋ ฌํ™”๋กœ ์ธํ•ด ๊ณต๊ฐœ API์— ์†ํ•˜๋ฏ€๋กœ ๋ฌธ์„œํ™” ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ‘@Serial’์„ ํ†ตํ•ด ๊ธฐ๋กํ–ˆ๋‹ค.
    • → ํ˜•ํƒœ๊ฐ€ ์ ํ•ฉํ•ด๋„ ‘๋ถˆ๋ณ€์‹ ๋ณด์žฅ'๊ณผ ๋ณด์•ˆ์„ ์œ„ํ•ด readObject ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•  ๋•Œ๊ฐ€ ๋งŽ๋‹ค.
    • public class Name implements Serializable { /** * ์„ฑ. null์ด ์•„๋‹ˆ์–ด์•ผ ํ•จ. * @Serial */ private final String lastName; /** * ์ด๋ฆ„. null์ด ์•„๋‹ˆ์–ด์•ผ ํ•จ. * @Serial */ private final String firstName; /** * ์ค‘๊ฐ„์ด๋ฆ„. ์ค‘๊ฐ„์ด๋ฆ„์ด ์—†๋‹ค๋ฉด null๊ฐ€๋Šฅ. * @Serial */ private final String middleName; }

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

  • ๊ณต๊ฐœ API๊ฐ€ ํ˜„์žฌ์˜ ๋‚ด๋ถ€ ํ‘œํ˜„ ๋ฐฉ์‹์— ์˜๊ตฌํžˆ ๋ฌถ์ธ๋‹ค. (์ด์ „ ํ•„๋“œ๋ฅผ ํ˜„์žฌ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋”๋ผ๋„ ์ง€์›ํ•ด์•ผํ•จ)
  • ๋„ˆ๋ฌด ๋งŽ์€ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค. (์ง๋ ฌํ™” ํ˜•ํƒœ๊ฐ€ ์ปค์ ธ์„œ ์ „์†ก/์ €์žฅ ์†๋„๊ฐ€ ๋Š๋ ค์ง„๋‹ค)
  • ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ๋งŽ์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ๋‹ค.
  • ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. (๊ธฐ๋ณธ ์ง๋ ฌํ™” ๊ณผ์ •์€ ๊ฐ์ฒด๋ฅผ ์žฌ๊ท€ ์ˆœํšŒํ•˜๋Š”๋ฐ ์ด๋Š” ๊ทœ๋ชจ๊ฐ€ ์žˆ๋Š” ๊ฐ์ฒด ๊ทธ๋ž˜ํ”„์—์„œ ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋‹ค)

ํ•ฉ๋ฆฌ์ ์ธ ์ง๋ ฌํ™” ํ˜•ํƒœ ๊ฐ–์ถ˜ ํด๋ž˜์Šค

// ์ฝ”๋“œ 87-3 ํ•ฉ๋ฆฌ์ ์ธ ์ปค์Šคํ…€ ์ง๋ ฌํ™” ํ˜•ํƒœ๋ฅผ ๊ฐ–์ถ˜ StringList (462-463์ชฝ)
public final class StringList implements Serializable {
    private transient int size   = 0;
    private transient Entry head = null;

    // ์ด์ œ๋Š” ์ง๋ ฌํ™”๋˜์ง€ ์•Š๋Š”๋‹ค.
    private static class Entry {
        String data;
        Entry  next;
        Entry  previous;
    }

    // ์ง€์ •ํ•œ ๋ฌธ์ž์—ด์„ ์ด ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•œ๋‹ค.
    public final void add(String s) {  }

    /**
     * ์ด {@code StringList} ์ธ์Šคํ„ด์Šค๋ฅผ ์ง๋ ฌํ™”ํ•œ๋‹ค.
     *
     * @serialData ์ด ๋ฆฌ์ŠคํŠธ์˜ ํฌ๊ธฐ(ํฌํ•จ๋œ ๋ฌธ์ž์—ด์˜ ๊ฐœ์ˆ˜)๋ฅผ ๊ธฐ๋กํ•œ ํ›„
     * ({@code int}), ์ด์–ด์„œ ๋ชจ๋“  ์›์†Œ๋ฅผ(๊ฐ๊ฐ์€ {@code String})
     * ์ˆœ์„œ๋Œ€๋กœ ๊ธฐ๋กํ•œ๋‹ค.
     */
    private void writeObject(ObjectOutputStream s)
            throws IOException {
        s.defaultWriteObject();
        s.writeInt(size);

        // ๋ชจ๋“  ์›์†Œ๋ฅผ ์˜ฌ๋ฐ”๋ฅธ ์ˆœ์„œ๋กœ ๊ธฐ๋กํ•œ๋‹ค.
        for (Entry e = head; e != null; e = e.next)
            s.writeObject(e.data);
    }

    private void readObject(ObjectInputStream s)
            throws IOException, ClassNotFoundException {
        s.defaultReadObject();
        int numElements = s.readInt();

        // ๋ชจ๋“  ์›์†Œ๋ฅผ ์ฝ์–ด ์ด ๋ฆฌ์ŠคํŠธ์— ์‚ฝ์ž…ํ•œ๋‹ค.
        for (int i = 0; i < numElements; i++)
            add((String) s.readObject());
    }

    // ๋‚˜๋จธ์ง€ ์ฝ”๋“œ๋Š” ์ƒ๋žต
}
  • transient : ์ง๋ ฌํ™”์—์„œ ์ œ์™ธ

๊ฐ์ฒด์˜ ๋…ผ๋ฆฌ์  ์ƒํƒœ์™€ ๋ฌด๊ด€ํ•œ ํ•„๋“œ๋ผ๊ณ  ํ™•์‹ ํ•  ๋•Œ๋งŒ transient ํ•œ์ •์ž๋ฅผ ์ƒ๋žตํ•ด์•ผ ํ•œ๋‹ค

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

  • ๋ช…์‹œ์ ์œผ๋กœ ๋ถ€์—ฌํ•˜๋ฉด ์ง๋ ฌ ๋ฒ„์ „ UID๊ฐ€ ์ผ์œผํ‚ค๋Š” ์ž ์žฌ์ ์ธ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๊ฐ€ ์‚ฌ๋ผ์ง„๋‹ค. (ํ•„๋“œ์— ๋”ฐ๋ผ ๋ฐ”๋€Œ์ง€ ์•Š์œผ๋ฏ€๋กœ)

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

readObject ๋ฉ”์„œ๋“œ๋Š” public ์ƒ์„ฑ์ž๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์ž‘์„ฑํ•˜์ž.

์ด ๋ฉ”์„œ๋“œ๋Š” ์–ด๋–ค ๋ฐ”์ดํŠธ์ŠคํŠธ๋ฆผ์ด๋ผ๋„ ์œ ํšจํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค์–ด ๋‚ด์•ผํ•œ๋‹ค.

readObject ์ž‘์„ฑ ์ง€์นจ

  • private์ด์–ด์•ผ ํ•˜๋Š” ๊ฐ์ฒด ์ฐธ์กฐ ํ•„๋“œ๋Š” ๊ฐ ํ•„๋“œ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ์ฒด๋ฅผ ๋ฐฉ์–ด์ ์„ ๋ณต์‚ฌํ•˜๋ผ. (๋ถˆ๋ณ€ ํด๋ž˜์Šค ๋‚ด ๊ฐ€๋ณ€ ์š”์†Œ)
  • ๋ฐฉ์–ด์  ๋ณต์‚ฌ ํ›„์—๋Š” ๋ถˆ๋ณ€์‹ ๊ฒ€์‚ฌ๊ฐ€ ๋’ค๋”ฐ๋ฅด๋ฉฐ ์ด๋ฅผ ํ†ต๊ณผํ•ด์•ผํ•œ๋‹ค.
  • ์ง/๊ฐ„์ ‘์ ์œผ๋กœ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋Š” ํ˜ธ์ถœํ•˜์ง€ ๋ง์ž

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

  • readResolve ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜๋ฉด readObject ๊ฐ€ ๋งŒ๋“ค์–ด๋‚ธ ์ธ์Šคํ„ด์Šค๋ฅผ ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ํ•˜์ง€๋งŒ, ์—ญ์ง๋ ฌํ™”ํ•œ ๊ฐ์ฒด๋Š” ๋ฌด์‹œํ•˜๊ณ  ํด๋ž˜์Šค ์ดˆ๊ธฐํ™” ์‹œ ๋งŒ๋“ค์–ด์ง„ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
    • ์ดˆ๊ธฐํ™” ์‹œ ๋งŒ๋“ค์–ด์ง„ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์ ธ์˜ค๋ฏ€๋กœ ์ง๋ ฌํ™” ์‹œ ์‹ค ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์งˆ ์ด์œ ๊ฐ€ ์—†๋‹ค (์–ด์ฐจํ”ผ ์•ˆ์”€). ๋ชจ๋“  ์ธ์Šคํ„ด์Šค ํ•„๋“œ๋ฅผ transient๋กœ ์„ ์–ธํ•  ๊ฒƒ
      • transient๋ฅผ ์•ˆ์“ฐ๋ฉด readResolver ์‹คํ–‰ ์ „ ์—ญ์ง๋ ฌํ™”๋œ ๊ฐ์ฒด์˜ ์ฐธ์กฐ๊ฐ€ ๊ณต๊ฒฉ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค. (์‹ฑ๊ธ€ํ„ด ํŒŒ๊ดด ๊ฐ€๋Šฅํ•  ์ˆ˜ ์žˆ์Œ)

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

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

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

Serializable ๊ตฌํ˜„ ๊ฒฐ์ • ์ดํ›„ ๋ถ€ํ„ฐ ์ •์ƒ ์ƒ์„ฑ์ž ์ด์™ธ์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ๋ฒ„๊ทธ ๋ณด์•ˆ์„ฑ ํผ.

๋ฒ„๊ทธ ๋ณด์•ˆ์„ฑ ์œ„ํ—˜์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ‘์ง๋ ฌํ™” ํ”„๋ก์‹œ ํŒจํ„ด'์„ ์‚ฌ์šฉํ•œ๋‹ค.

๋ฐ”๊นฅ ํด๋ž˜์Šค์˜ ๋…ผ๋ฆฌ์  ์ƒํƒœ๋ฅผ ์ •๋ฐ€ํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜๋Š” ์ค‘์ฒฉ ํด๋ž˜์Šค๋ฅผ ์„ค๊ณ„ํ•ด private static์œผ๋กœ ์„ ์–ธํ•œ๋‹ค.

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