๋ง์ปค ์ธํฐํ์ด์ค๋ ์ธํฐํ์ด์ค์ ํด๋์ค๋ฅผ ์ฐ๊ฒฐํ ์ ์๋ ๋ฐํ์ ์ ํ ๊ฒ์ฌ ๊ธฐ๋ฅ์ด ํฌํจ๋ ๋์์ธ ํจํด์
๋๋ค. ์ด๊ฒ์ด ํ์ํ ์ด์ ๋ฅผ ์ดํดํ๋ ค๋ฉด Serializible ํด๋์ค๋ฅผ ๋ง์ปค๋ก ํ์ํ๋ ์๋ฅผ ๊ณ ๋ คํ์ญ์์ค. ๊ฐ์ฒด์ ์ํ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ ๋ค์ ์ ์ฅํ ๋ด์ฉ์ ํด๋
ํ ์ ์์ด์ผ ํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ๊ฐ์ฒด๋ฅผ ๋นํธ ์งํฉ์ผ๋ก ๋ณํํ ์ ์๋ค๊ณ ๋ง์ํ์
จ์ต๋๋ค. ์ค๋ฅธ์ชฝ. FileInputStream์ ์ฌ์ฉํ์ฌ ํ์ผ์ ์ฐ๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์์ง๋ง ์ด๋ ๊ฐ์ฒด๊ฐ ์ ์ ๋๋ง ํธ๋ฆฌํ์ง๋ง ๊ฐ์ฒด๊ฐ ๋ง์ผ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? ์ด๋ฅผ ์ํ ํ๋ฅญํ ์ง๋ ฌํ ๋๊ตฌ๊ฐ ์์ต๋๋ค. ์ด๋ฅผ ์ฌ์ฉํ ๋์ ์ฃผ์ ๊ท์น์ ์ง๋ ฌํ๋๋ ๊ฐ์ฒด๊ฐ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ํฌํจํด์ผ ํ๋ฉฐ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํด์๋ ์ ๋๋ค๋ ๊ฒ์
๋๋ค. ํด๋์ค๋ฅผ ๋ณด์ธ์. "์ํ, ํ๋๊ฐ ์ฐธ์กฐ๋์ง ์๊ณ ์ง๋ ฌํ ๊ฐ๋ฅ ๋ง์ปค๋ฅผ ๋ฃ๋ ๊ฒ์ด ์ข์ต๋๋ค." ๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ ๋ฃ์ผ๋ฉด ํ์ํ ๊ฐ์ฒด๊ฐ ObjectOutputStream์ ๊ธฐ๋ก๋ ์ ์์์ ์๋ฏธํฉ๋๋ค. ObjectOutputStream ํด๋์ค์๋ writeObject0() ๋ฉ์๋๊ฐ ์์ผ๋ฉฐ, ์ฌ๊ธฐ์๋ ๊ฐ์ฒด๋ฅผ ์ธ ์ ์๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ๊ฒ์ฌ ์ธ์คํด์ค๊ฐ ํฌํจ๋์ด ์์ผ๋ฉฐ, ์ ์ฒด ๊ฒ์ฌ๊ฐ ์คํจํ๋ฉด NotSerializedException ์์ธ๊ฐ ๋ฐ์ํ๊ณ , ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ๋ชจ๋ ๊ฒ์ด ๊น๋ํ๊ฒ ๋ฉ๋ชจ๋ฆฌ์ ๊ธฐ๋ก๋ฉ๋๋ค. ์ง๋ ฌํํ ์ธ์คํด์ค์ธ BigObject ํด๋์ค๋ฅผ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค.
package post1; import java.io.Serializable; public class BigObject implements Serializable { private int id; public void setId(final int id){ this.id = id; } public int getId() { return id; } }
BigObject ํด๋์ค๋ ์ด๋ฏธ ์ง๋ ฌํ ๊ฐ๋ฅ์ผ๋ก ํ์๋์ด ์์ต๋๋ค. ์ฌ๊ธฐ์๋ ํ๋์ ID ํ๋์ ํจ๊ป ์ ๊ณต๋๋ get/set ๋ฉ์๋๊ฐ ์์ต๋๋ค. package post1; import post1.BigObject; import java.io.*; public class InterfaceMarker { public static void main(String[] args) throws IOException, ClassNotFoundException { int originalId = 12; BigObject objectOriginal = new BigObject(); objectOriginal.setId(originalId); ByteArrayOutputStream writeBuffer = new ByteArrayOutputStream(); ObjectOutputStream outputStream = new ObjectOutputStream(writeBuffer); outputStream.writeObject(objectOriginal); outputStream.close(); byte[] buffer = writeBuffer.toByteArray(); ByteArrayInputStream readBuffer = new ByteArrayInputStream(buffer); ObjectInputStream inputStream = new ObjectInputStream(readBuffer); BigObject objectCopy = (BigObject)inputStream.readObject(); if (objectCopy.getId() == originalId) System.out.println( "originalId equals copiedId"); } }
GO TO FULL VERSION