JavaRush /Java Blog /Random-KO /์ธํ„ฐํŽ˜์ด์Šค - ๋งˆ์ปค
dupliaka
๋ ˆ๋ฒจ 29
ะกะฐะฝะบั‚-ะŸะตั‚ะตั€ะฑัƒั€ะณ

์ธํ„ฐํŽ˜์ด์Šค - ๋งˆ์ปค

Random-KO ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
๋งˆ์ปค ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ธํ„ฐํŽ˜์ด์Šค์™€ ํด๋ž˜์Šค๋ฅผ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋Ÿฐํƒ€์ž„ ์œ ํ˜• ๊ฒ€์‚ฌ ๊ธฐ๋Šฅ์ด ํฌํ•จ๋œ ๋””์ž์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ํ•„์š”ํ•œ ์ด์œ ๋ฅผ ์ดํ•ดํ•˜๋ ค๋ฉด 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"); } }

๊ฐ์ฒด ๊ธฐ๋ก

๋จผ์ € ์ง๋ ฌํ™” ๊ฐ€๋Šฅ ํด๋ž˜์Šค BigObject์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ๋‹ค์Œ ์ด๋ฅผ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ๋ฒ„ํผ๋ฅผ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ๋ชจ๋“  ํ™œ ByteArrayOutputStream์„ ๋ฐฐ์น˜ํ•  ์žฅ์†Œ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด๋ฏธ ์–ธ๊ธ‰ํ•œ ObjectOutputStream์„ ์ค€๋น„ํ•˜๊ณ  ์—ฌ๊ธฐ์— ๋ฒ„ํผ๋ฅผ ์ „๋‹ฌํ•œ ๋‹ค์Œ ๊ฐœ์ฒด๋ฅผ ์ŠคํŠธ๋ฆผ์— ์“ฐ๊ณ  ๋‹ซ์Šต๋‹ˆ๋‹ค.

๊ฐ์ฒด ์ฝ๊ธฐ

์“ฐ๊ธฐ ๋ฒ„ํผ readBuffer๋ฅผ ์ค€๋น„ํ•˜๊ณ , inputStream์„ ์ „๋‹ฌํ•˜๊ณ , readObject()๋ฅผ ์ฝ์–ด ๋ด…์‹œ๋‹ค. ์ด์ œ ๊ฐœ์ฒด๊ฐ€ ๋ณต์›๋˜์—ˆ์Šต๋‹ˆ๋‹ค. 'id' ํ•„๋“œ๊ฐ€ ๋งํฌ๊ฐ€ ์•„๋‹ˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์™„์ „ํžˆ ํฌํ•จ๋œ ์ง๋ ฌํ™” ๊ฐ€๋Šฅ ํด๋ž˜์Šค๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํด๋ž˜์Šค ๋‚ด์— ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋Œ€์‹  ํ† ํฐ์„ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ž˜์Šค ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹จ์ˆœํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION