๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Back/Java

[JAVA] ๋ฐ์ดํ„ฐ ์ง๋ ฌํ™”(serialization) ํ•˜๋Š” ์ด์œ 

by ์€z 2022. 2. 11.

๐Ÿ‘€๊ถ๊ธˆ์ฆ?

ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ  DTO, VO ํด๋ž˜์Šค ๋ช… ๋์—

implements Serializable

์ด๋ ‡๊ฒŒ ๋ถ™์ด๋Š” ๊ฒฝ์šฐ๋ฅผ ๋งŽ์ด ๋ดค๋‹ค.

๋‹น์žฅ ๋ˆˆ์— ๋ณด์ด๋Š” ํšจ๊ณผ๋Š” ์—†๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ ์™œ ์ง๋ ฌํ™”๋ฅผ ํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š”์ง€ ์˜๋ฌธ์ด ์ƒ๊ฒผ๋‹ค.

 

 

์•„์ง 100% ์ดํ•ดํ•œ ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, ์•Œ์•„๋ณธ ๋ฐ” ๋Œ€๋กœ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

 

โœ”๏ธprivate static final long serialVersionUID ๋Š” ์™œ ์‚ฌ์šฉํ•˜๋‚˜?

๋„๋ฉ”์ธ ๊ฐ์ฒด์— private static final long serialVersionUID = 8999559983943337176L; ์ด๋Ÿฐ ์‹์œผ๋กœ ๋ฉค๋ฒ„๋ณ€์ˆ˜๊ฐ€ ๋“ค์–ด ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” type safety ๋•Œ๋ฌธ์ด๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด ์ง๋ ฌํ™”ํ•œ ๊ฐ์ฒด๋ฅผ ์›๊ฒฉ์ง€์— ์ „์†ก์„ ํ–ˆ๋‹ค๊ณ  ํ–ˆ์„ ๊ฒฝ์šฐ์— ์ „์†ก๋œ ๊ฐ์ฒด์˜ ํด๋ž˜์Šค์™€ ์›๊ฒฉ์ง€์˜ ํด๋ž˜์Šค์™€ ๋™์ผํ•œ์ง€ ์—ฌ๋ถ€ ์ฒดํฌ๋ฅผ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. serialVersionUID ๋‹ค๋ฅผ๊ฒฝ์šฐ java.io.InvalidClassException ์ด ๋ฐœ์ƒํ•œ๋‹ค.

 

โœ”๏ธ๋ฐ์ดํ„ฐ ์ง๋ ฌํ™”(serialization) ์™œ ํ•„์š”ํ•œ๊ฐ€? 

 

๋จผ์ € ๋ฐ์ดํ„ฐ ์ง๋ ฌํ™”๋ž€, ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋””์Šคํฌ์— ์ €์žฅํ•˜๊ฑฐ๋‚˜ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์— ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. 

(์—ญ์ง๋ ฌํ™” desrialization๋Š” ๊ทธ ๋ฐ˜๋Œ€)

 

๊ทธ๋ ‡๋‹ค๋ฉด, ์™œ ๋ฐ์ดํ„ฐ๋ฅผ ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ๊ทธ๋ƒฅ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋˜๊ณ  ์ง๋ ฌํ™”๋ฅผ ํ•ด์ฃผ์–ด์•ผ ํ• ๊นŒ?

 

๋ฐ”๋กœ ๋””์Šคํฌ์— ์ €์žฅํ•˜๊ฑฐ๋‚˜ ํ†ต์‹ ์— ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ๐Ÿ“Œ๊ฐ’ ํ˜•์‹ ๋ฐ์ดํ„ฐ๋งŒ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ฐธ๊ณ ๋กœ ๋ฐ์ดํ„ฐ๋“ค์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๋Š” ํฌ๊ฒŒ 2๊ฐ€์ง€๋กœ ๋‚˜๋‰œ๋‹ค.

1. ๊ฐ’ ํ˜•์‹ ๋ฐ์ดํ„ฐ(Value Type) : ์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ์„ ์–ธํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” int, float, char ๋“ฑ, ๊ฐ’ ํ˜•์‹ ๋ฐ์ดํ„ฐ๋“ค์€ ์Šคํƒ์— ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์Œ“์ด๊ณ  ์ง์ ‘ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

2. ์ฐธ์กฐ ํ˜•์‹ ๋ฐ์ดํ„ฐ(Reference Type) : ์ž๋ฐ”์—์„œ byte, short, char, int, long, boolean, float, double ์ด๋ ‡๊ฒŒ 8๊ฐ€์ง€ ํƒ€์ž…์„ ์ œ์™ธํ•˜๊ณ ๋Š” ๋ชจ๋‘ ์ฐธ์กฐ ํ˜•์‹ ๋ฐ์ดํ„ฐ์— ํ•ด๋‹นํ•œ๋‹ค. ์ฐธ์กฐ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ฉด ํž™์— ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ• ๋‹น๋˜๊ณ  ์Šคํƒ์—์„œ๋Š” ์ด ํž™ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜๋Š”(ํž™์— ๋ฉ”๋ชจ๋ฆฌ ๋ฒˆ์ง€ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ) ๊ตฌ์กฐ๋กœ ๋˜์–ด์žˆ๋‹ค.

 

์™œ ๊ฐ’ ํ˜•์‹ ๋ฐ์ดํ„ฐ๋งŒ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ• ๊นŒ?

์ฐธ์กฐํ˜•์‹ ๋ฐ์ดํ„ฐ๋ฅผ ํ†ต์‹ ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ์ด์œ ๋Š” ๊ฐ pc ๋งˆ๋‹ค ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ์ฃผ์†Œ๊ฐ€ ๋ชจ๋‘ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋งŒ์•ฝ ๋‚ด๊ฐ€ A๊ฐ์ฒด(0x00016413) ๋ฅผ ๋‹ค๋ฅธ pc๋กœ ์ „์†กํ–ˆ๋‹ค๋ฉด ์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์€ pc์˜ 0x00016413 ์ฃผ์†Œ์—๋Š” ์ „ํ˜€ ๋‹ค๋ฅธ ๊ฐ’์ด 

์กด์žฌํ•œ๋‹ค.

 

๊ทธ๋Ÿฐ๋ฐ, ์ง๋ ฌํ™”๋ฅผ ํ•˜๋ฉด ๊ฐ ์ฃผ์†Œ๊ฐ’์ด ๊ฐ€์ง€๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ๋ชจ๋‘ ๊ฐ’ ํ˜•์‹์œผ๋กœ ๋ฐ”๊พธ์–ด์ค€๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ง๋ ฌํ™”๋œ ๋ฐ์ดํ„ฐ๋“ค์€ ํ†ต์‹  ์‹œ์— ํŒŒ์‹ฑ์ด ๊ฐ€๋Šฅํ•œ ์œ ์˜๋ฏธํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋œ๋‹ค.

 

 

๋Œ“๊ธ€