Serialization - hyunwoo-e/Spring GitHub Wiki

UID

๋ชจ๋“  Class๋Š” UID๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ Class์˜ ๋‚ด์šฉ์ด ๋ณ€๊ฒฝ๋˜๋ฉด UID๊ฐ’ ์—ญ์‹œ ๊ฐ™์ด ๋ฐ”๋€Œ์–ด ๋ฒ„๋ฆฐ๋‹ค. UID๊ฐ’์œผ๋กœ ํ†ต์‹ ํ•œ๊ฒŒ ์ •์ƒ์ธ์ง€ ํ™•์ธํ•˜๋Š”๋ฐ ๊ทธ ๊ฐ’์ด ๋ฐ”๋€Œ๊ฒŒ ๋˜๋ฉด ๋‹ค๋ฅธ Class๋กœ ์ธ์‹์„ ํ•ด๋ฒ„๋ฆฌ๊ฒŒ ๋œ๋‹ค.

์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ž๋ฐ”์—์„  Serializable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ์ด๋ฅผ ๋ณด์žฅํ•œ๋‹ค. (implements Serializable) ๊ณ ์œ ๊ฐ’์œผ๋กœ ๋ฏธ๋ฆฌ ๋ช…์‹œ๋ฅผ ํ•ด์ฃผ๋Š” ๋ถ€๋ถ„์ด ๋ฐ”๋กœ "private static final long serialVersionUID"์ด๋‹ค.

๊ฐ์ฒด ์ „์†ก์˜ ๋‹จ๊ณ„

๊ฐ์ฒด๋ฅผ ๋ถ„ํ•ดํ•˜์—ฌ ์ „์†กํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ง๋ ฌํ™”(Serialization) ๋˜์–ด์•ผ ํ•œ๋‹ค. ๊ฐ์ฒด๋ฅผ ์ „์†กํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” 3๊ฐ€์ง€ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์นœ๋‹ค.

(1) ์ง๋ ฌํ™”๋œ ๊ฐ์ฒด๋ฅผ ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ๋ถ„ํ•ดํ•œ๋‹ค. (marshalling)

(2) ์ง๋ ฌํ™” ๋˜์–ด ๋ถ„ํ•ด๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์„œ์— ๋”ฐ๋ผ ์ „์†กํ•œ๋‹ค.

(3) ์ „์†ก ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ์›๋ž˜๋Œ€๋กœ ๋ณต๊ตฌํ•œ๋‹ค. (unmarshalling)

๋งˆ์ƒฌ๋ง (marshalling)

๋งˆ์ƒฌ๋ง(marshalling)์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”์ดํŠธ์ŠคํŠธ๋ฆผ์— ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ๋ฐ”๊พธ๋Š” ๋ณ€ํ™˜ ์ž‘์—…์„ ๋œปํ•œ๋‹ค. ์ž๋ฐ”์—์„œ ๋งˆ์ƒฌ๋ง์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋Š” ์›์‹œ ์ž๋ฃŒํ˜•(boolean, char, byte, short, int, long, float, double)์™€ ๊ฐ์ฒด ์ค‘์—์„œ Serializable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด์ด๋‹ค.

๊ฐ์ฒด๋Š” ์›์‹œ ์ž๋ฃŒํ˜•๊ณผ ๋‹ฌ๋ฆฌ ์ผ์ •ํ•œ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง€์ง€ ์•Š๊ณ  ๊ฐ์ฒด ๋‚ด๋ถ€์˜ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ํฌ๊ธฐ๊ฐ€ ์ฒœ์ฐจ๋งŒ๋ณ„๋กœ ๋‹ฌ๋ผ์ง„๋‹ค. ์ด๋Ÿฐ ๋ฌธ์ œ์ ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š”๊ฒŒ ObjectOutputStream ํด๋ž˜์Šค์ด๋‹ค.

์ง๋ ฌํ™” (Serializable)

Serializable ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์•„๋ฌด๋Ÿฐ ๋ฉ”์†Œ๋“œ๊ฐ€ ์—†๊ณ  ๋‹จ์ˆœํžˆ ์ž๋ฐ” ๋ฒ„์ถ”์–ผ ๋จธ์‹ ์—๊ฒŒ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์˜๋ฏธ๋งŒ์„ ๊ฐ€์ง„๋‹ค.

  • ์ง๋ ฌํ™”๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด์˜ ์กฐ๊ฑด (1) ๊ธฐ๋ณธํ˜• ํƒ€์ž…(boolean, char, byte, short, int, long, float, double)์€ ์ง๋ ฌํ™”๊ฐ€ ๊ฐ€๋Šฅ

(2) Serializable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฐ์ฒด์—ฌ์•ผ ํ•œ๋‹ค. (Vector ํด๋ž˜์Šค๋Š” Serializable ์ธํ„ฐํŽ˜์ด์Šค๊ตฌํ˜„)

(3) ํ•ด๋‹น ๊ฐ์ฒด์˜ ๋ฉค๋ฒ„๋“ค ์ค‘์— Serializable ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๊ตฌํ˜„๋˜์ง€ ์•Š์€๊ฒŒ ์กด์žฌํ•˜๋ฉด ์•ˆ๋œ๋‹ค.

(4) transient ๊ฐ€ ์‚ฌ์šฉ๋œ ๋ฉค๋ฒ„๋Š” ์ „์†ก๋˜์ง€ ์•Š๋Š”๋‹ค. (๋ณด์•ˆ ๋ณ€์ˆ˜ : null ์ „์†ก)

์–ธ๋งˆ์ƒฌ๋ง (unmarshalling)

์–ธ๋งˆ์ƒฌ๋ง์€ ๋ฐ”์ดํŠธ์ŠคํŠธ๋ฆผ์„ ํ†ตํ•ด์„œ ์ „๋‹ฌ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์›๋ž˜์˜ ๊ฐ์ฒด๋กœ ๋ณต๊ตฌํ•˜๋Š” ์ž‘์—…์ด๋‹ค. ObjectInputStream์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต๊ตฌํ•œ๋‹ค.

์ฐธ๊ณ 

http://hyeonstorage.tistory.com/252