Serialization
๋ง์ Java ๊ฐ๋ฐ์๋ค์๊ฒ๋ ํญ์
SerialVersionUID
๋ฏธ์คํฐ๋ฆฌ๋ก ๋จ์ ์์ต๋๋ค. ๊ฐ ๋ฌด์์ธ์ง, ๋๋ -class ์์
SerialVersionUID
์ ์ธํ์ง ์์ผ๋ฉด ์ด๋ป๊ฒ ๋๋์ง ์ ๋ํ ์ง๋ฌธ์ ์์ฃผ ๋ด
๋๋ค . ํผ๋์ค๋ฝ๊ณ ์์ฃผ ์ฌ์ฉ๋์ง ์๋ ๊ฒ ์ธ์๋ ์ด ์ง๋ฌธ์ ๋ ๋ค๋ฅธ ์ด์ ๋ Eclipse IDE์ ๊ฒฝ๊ณ ๊ฐ ์๊ธฐ ๋๋ฌธ์
๋๋ค . ์๋ฅผ ๋ค์ด " ์ง๋ ฌํ ๊ฐ๋ฅ ํด๋์ค Customer๋ long ์ ํ ์
์ ์ ์ต์ข
SerialVersionUID ํ๋๋ฅผ ์ ์ธํ์ง ์์ต๋๋ค. " long"). ์ด ๊ธฐ์ฌ์์๋ Java์ ๊ธฐ๋ณธ ์ฌํญ ๋ฟ๋ง ์๋๋ผ Java๊ฐ ์ง๋ ฌํ ๋ฐ ์ญ์ง๋ ฌํ ํ๋ก์ธ์ค์ ๋ฏธ์น๋ ์ํฅ๋ ๋ฐฐ์๋๋ค . ํ ํฐ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์ฌ ํด๋์ค๋ฅผ ์ ์ธํ๋ฉด
์ธ๋ถํ ๊ฐ๋ฅ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋๋ก ํ๋ก์ธ์ค๋ฅผ ๊ตฌ์ฑํ์ง ์๋ ํ Java ๋ฐํ์์ ๊ธฐ๋ณธ ์ง๋ ฌํ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ์ฌ ํด๋น ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ๋์คํฌ์ ์ ์ฅํฉ๋๋ค . ์ง๋ ฌํ ์ค์ Java ๋ฐํ์์ ๋์ค์ ํด๋์ค๋ฅผ ์ญ์ง๋ ฌํํ ์ ์๋๋ก ํด๋์ค์ ๋ฒ์ ๋ฒํธ๋ฅผ ์์ฑํฉ๋๋ค. Java์์๋ ์ด ๋ฒ์ ๋ฒํธ๋ฅผ . ์ญ์ง๋ ฌํ ์ค์ ์ผ์นํ๋ ํญ๋ชฉ์ด ์์ผ๋ฉด " " ์คํธ๋ฆผ์์ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด์ ํ๋ก์ธ์ค๊ฐ ์ข
๋ฃ๋๊ณ ํด๋์ค ์ด๋ฆ๊ณผ ํด๋น . ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋น ๋ฅธ ํด๊ฒฐ์ฑ
์ ์ด๋ฅผ ํด๋์ค์ ์ ํ ์์๋ก ๋ณต์ฌํ๊ณ ์ ์ํ๋ ๊ฒ์
๋๋ค. ์ด ๊ธฐ์ฌ์์๋ Java์์ ์ฌ์ฉํด์ผ ํ๋ ์ด์ ์ ์ง๋ ฌ ์๋ฒ JDK ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ด ID๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ด
๋๋ค .
์ง๋ ฌํ๋ฅผ ์ฒ์ ์ ํ๋ ๊ฒฝ์ฐ ์์ 10๊ฐ Java ์ง๋ ฌํ ์ธํฐ๋ทฐ ์ง๋ฌธ์ ์์ฒญํ์ฌ ์ง์์ ํ๊ฐํ๊ณ ์ถ๊ฐ ์ฝ๊ธฐ๋ฅผ ์ํ ์ดํด์ ๊ฒฉ์ฐจ๋ฅผ ์ฐพ์ ์๋ ์์ต๋๋ค. (๋์์ฑ) ๋ฐ (๋ฉํฐ์ค๋ ๋ฉ) ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก (์ง๋ ฌํ)๋ ์ฌ๋ฌ ๋ฒ ์ฝ์ ๊ฐ์น๊ฐ ์๋ ๋ ๋ค๋ฅธ ์ฃผ์ ์
๋๋ค.
SerialVersionUID
Serializable
SerialVersionUID
Serializable
Customer
SerialVersionUID
SerialVersionUID
Serializable
java.io.Serializable
SerialVersionUID
SerialVersionUID
InvalidClassException
main
java.io.InvalidClassException
SerialVersionUID
SerialVersionUID
private
static
final
long
SerialVersionUID
Concurrency
Multi-threading
Serialization
Java์์ SerialVersionUID๋ฅผ ์ฌ์ฉํ๋ ์ด์
SerialVersionUID
๋ด๊ฐ ๋งํ๋ฏ์ด, ํด๋์ค์์ ์ ๊ฐ์ด ๊ฐ์ ์ ์ํ์ง ์์ ๊ฒฝ์ฐ
static
final
long
์ง๋ ฌํ ๋ฉ์ปค๋์ฆ์ด ์ด๋ฅผ ๋์ ์ํํฉ๋๋ค. ์ด ๋ฉ์ปค๋์ฆ์ ํด๋์ค์ ํ๋, ํด๋น ์ก์ธ์ค ํ์ ์, ๊ตฌํํ๋ ์ธํฐํ์ด์ค, ์ฌ์ง์ด ๋ค๋ฅธ ์ปดํ์ผ๋ฌ ๊ตฌํ์ ํฌํจํ ๋ง์ ์ธ๋ถ ์ฌํญ์ ๋ฏผ๊ฐํฉ๋๋ค. ํด๋์ค๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ๋ค๋ฅธ ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ ์์ฑ๋ ์ ์์ต๋๋ค
SerialVersionUID
. ์ง๋ ฌํ๋ ๋ฐ์ดํฐ๊ฐ ๋ค์ ๋ก๋๋๋ ๊ฒ์ ์ค์งํฉ๋๋ค. ์ด ID๋ฅผ ์์ฑํ๊ธฐ ์ํด Java์ ์ง๋ ฌํ ๋ฉ์ปค๋์ฆ์ ์์กดํ๋ ๊ฒ์ ์ํํ๋ฏ๋ก
Serialized ํด๋์คSerialVersionUID
์์ ์ด๋ฅผ ๋ช
์์ ์ผ๋ก ์ ์ํ๋ ๊ฒ์ด ์ข์ต๋๋ค . Java ์ง๋ ฌํ์ ์ด๋ฅผ ์๋ชป ์ฒ๋ฆฌํ ๋ ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ์ดํดํ๋ ค๋ฉด Java ๊ณ ์ ์ธ
Joshua Bloch "Effective Java"๋ฅผ ์ฝ์ด๋ณผ ๊ฒ์ ์ ๊ทน ๊ถ์ฅํฉ๋๋ค. ๊ทธ๋ฐ๋ฐ JDK๋ ๋ด ์ปดํจํฐ
C:\Program Files\Java\jdk1.6.0_26\bin\serialver.exe ์ JAVA_HOME ๋๋ ํ ๋ฆฌ ์
bin ๋๋ ํ ๋ฆฌ ์ ์๋ ๋๊ตฌ๋ ์ ๊ณตํฉ๋๋ค . ์ค๋๋ ์์
์ ์ํด. ์ด๋ ํด๋์ค๋ฅผ ๋ณ๊ฒฝํ์ฌ ์ง๋ ฌํ๋ฅผ ์ค๋จํ๊ณ ์ ํ๋ฆฌ์ผ์ด์
์ด ์ง๋ ฌํ๋ ์ธ์คํด์ค๋ฅผ ๋ค์ ๋ก๋ํ ์ ์๋ ๊ฒฝ์ฐ์ ๋งค์ฐ ์ ์ฉํฉ๋๋ค. ์ด ์ ํธ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๊ฒ ์ด์ ์ธ์คํด์ค๋ฅผ ๋ง๋ ๋ค์ ํ๋๋ฅผ
private static final long ์ผ๋ก ์ ์ธํ์ฌ ๋ช
์์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค . ๊ทธ๋ฐ๋ฐ ์ฑ๋ฅ ๋ฐ ๋ณด์์์ ์ด์ ๋ก ์ง๋ ฌํ์ ์ผ๋ฐ ๋ฐ์ด๋๋ฆฌ ํ์์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. "Effective Java"์๋ ์ผ๋ฐ ํ์์ ์ฅ์ ์ ๋งค์ฐ ์์ธํ ๋ณด์ฌ์ฃผ๋ ์ฌ๋ฌ ๋จ๋ฝ์ด ์์ต๋๋ค.
serialver
SerialVersionUID
SerialVersionUID
SerialVersionUID
Serialver JDK ์ ํธ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ์ฌ SerialVersionUID๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ
serialver
์์
์ ์์ฑํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค
SerialVersionUID
. ์ด๋ ํด๋์ค ๊ฐ๋ฐ์ ํนํ ์ ์ฉํ๋ฉฐ ์ ํธ๋ฆฌํฐ๋
SerialVersionUID
๋ณต์ฌํ๊ธฐ ์ฌ์ด ํ์์ผ๋ก ๋ฐํ๋ฉ๋๋ค.
serialver
์์ ์ ํ์๋ ๋๋ก JDK ์ ํธ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค .
$ serialver
use: serialver [-classpath classpath] [-show] [classname...]
$ serialver -classpath . Hello
Class Hello is not Serializable.
$ serialver -classpath . Hello
Hello: static final long SerialVersionUID = -4862926644813433707L;
์ ํธ๋ฆฌํฐ๋ฅผ ๋ช
๋ น
serialver
์ผ๋ก ์ฌ์ฉํ ์๋ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ ์ฒด ํด๋์ค ์ด๋ฆ์ ๊ฐ์ ธ์ ํ์ํ๋ ๊ฒ์ฌ๊ธฐ๊ฐ ์ด๋ฆฝ๋๋ค .
GUI
$ serialver โshow
serial version
Serial version
์์ฝ
์ด์ ์ฐ๋ฆฌ๋ ์ด๊ฒ์ด ๋ฌด์์ธ์ง
SerialVersionUID
, ํด๋์ค์์ ์ ์ธํ๋ ๊ฒ์ด ์ ์ค์ํ์ง ์์
Serializable
์ต๋๋ค. ์ด์ Java SerialVersionUID์ ๊ด๋ จ๋ ๋ช ๊ฐ์ง ์ค์ํ ์ฌ์ค์ ๊ฒํ ํ ์ฐจ๋ก์
๋๋ค.
SerialVersionUID
์ง๋ ฌํ๋ ๋ฐ์ดํฐ์ ๋ฒ์ ์ ๋ํ๋ด๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
SerialVersionUID
ํด๋์ค์์ ์ ์ธํ์ง ์์ผ๋ฉด Java ๋ฐํ์์ด ์ด๋ฅผ ์ํํ์ง๋ง ์ด ํ๋ก์ธ์ค๋ ํ๋ ์, ํ๋ ์ ํ, ํ๋ ์ก์ธ์ค ์์ ์, ํด๋์ค์์ ๊ตฌํ๋๋ ์ธํฐํ์ด์ค๋ฅผ ํฌํจํ์ฌ ํด๋์ค์ ๋ง์ ๋ฉํ๋ฐ์ดํฐ์ ๋ฏผ๊ฐํฉ๋๋ค. ๋ฑ. Oracle์ ์ง๋ ฌํ ๋ฌธ์์์ ์ ํํ ์ ๋ณด๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
- ๊ธฐ๋ณธ ๋ฉ์ปค๋์ฆ์ ๋ฐฉ์งํ๋ ค๋ฉด SerialVersionUID๋ฅผ ์ ์ฉ ์ ์ ์ต์ข
๊ธด ๋ณ์๋ก ์ ์ธํ๋ ๊ฒ์ด ์ข์ต๋๋ค. Eclipse ์ ๊ฐ์ ์ผ๋ถ IDE์์๋ ์ด๋ฅผ ์์ด๋ฒ๋ฆฐ ๊ฒฝ์ฐ ๊ฒฝ๊ณ ๋ฅผ ํ์ํฉ๋๋ค(์: "์ง๋ ฌํ ๊ฐ๋ฅ ํด๋์ค ๊ณ ๊ฐ์ long ์ ํ์ ์ ์ ์ต์ข
SerialVersionUID ํ๋๋ฅผ ์ ์ธํ์ง ์์ต๋๋ค."). Window > Preferences > Java > Compiler > Errors/Warnings > ์ ์ฌ์ ์ธ ํ๋ก๊ทธ๋๋ฐ ๋ฌธ์ ๋ก ์ด๋ํ์ฌ ์ด ๊ฒฝ๊ณ ๋ฅผ ๋นํ์ฑํํ ์ ์์ง๋ง ๊ทธ๋ ๊ฒ ํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ฐ์ดํฐ ๋ณต๊ตฌ๊ฐ ํ์ํ์ง ์์ ๊ฒฝ์ฐ์๋ง ๋ถ์ฃผ์ํ ์ ์์ต๋๋ค. Eclipse IDE์์ ์ด ์ค๋ฅ๊ฐ ๋ํ๋๋ ๋ชจ์ต์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๋จผ์ ๋น ๋ฅธ ๊ฒฐ์ ์ ๋ด๋ฆฌ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
- JDK์ serialver ์ ํธ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ์ฌ Java ํด๋์ค์ ์ง๋ ฌ ๋ฒ์ ์ ์์ฑํ ์๋ ์์ต๋๋ค. ์ด ์ ํธ๋ฆฌํฐ์๋ - ๋งค๊ฐ๋ณ์๋ฅผ ์ ๋ฌํ๋ฉด ํ์ฑํ๋๋ GUI๋ ์์ต๋๋ค
show
.
- ์ง๋ ฌํ์ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์
SerialVersionUID
ํนํ RMI์ ๊ฐ์ด ์ง๋ ฌํ๋ ๋ฐ์ดํฐ์ ์์กดํ๋ ํด๋ผ์ด์ธํธ-์๋ฒ ์ ํ๋ฆฌ์ผ์ด์
์ผ๋ก ์์
ํ๋ ๊ฒฝ์ฐ ์ญ์ง๋ ฌํ ๊ด๋ จ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ฅผ ๋ช
์์ ์ผ๋ก ์ ์ธํ๋ ๊ฒ์
๋๋ค.
SerialVersionUID
๋ชจ๋ ๊ฒ์ด Java์ ๊ดํ ๊ฒ์
๋๋ค . ์ด์ ์ฐ๋ฆฌ๋ ํด๋์ค์์ ์ฌ๋ฐ๋ฅด๊ฒ ์ ์ธํ๋ ๊ฒ์ด ์ ์ค์ํ์ง ์์์ต๋๋ค
SerialVersionUID
. ์ ์ฌ์ ์ผ๋ก ํด๋์ค์ ์ญ์ง๋ ฌํ๊ฐ ์ค๋จ๋ ์ ์๋ ์ด ์๋ฆผ์ ๋ํด IDE์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ง๋ ฌํ ๋ฐ ๊ด๋ จ ๊ฐ๋
์ ๋ํด ๋ ์์ธํ ์๊ณ ์ถ๋ค๋ฉด ๋ค์ ๋ฉ์ง ๊ธฐ์ฌ๋ฅผ ํ์ธํด ๋ณด์ธ์.
์๋ณธ์
์ฌ๊ธฐ
GO TO FULL VERSION