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์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ณต๊ตฌํ๋ค.