๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Java/Java์˜ ์ •์„

Chapter 15 - ์ž…์ถœ๋ ฅ I/O

Chapter 15 - ์ž…์ถœ๋ ฅ I/O

1. ์ž๋ฐ”์—์„œ์˜ ์ž…์ถœ๋ ฅ

1.1 ์ž…์ถœ๋ ฅ์ด๋ž€?

  • Input & Output
  • ์ปดํ“จํ„ฐ ๋‚ด๋ถ€ ๋˜๋Š” ์™ธ๋ถ€์˜ ์žฅ์น˜์™€ ํ”„๋กœ๊ทธ๋žจ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๊ฒƒ

1.2 ์ŠคํŠธ๋ฆผ(stream)

  • ๋ฐ์ดํ„ฐ๋ฅผ ์šด๋ฐ˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์—ฐ๊ฒฐํ†ต๋กœ
  • ๋‘ ๋Œ€์ƒ์„ ์—ฐ๊ฒฐํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ
  • ๋‹จ ๋ฐ˜ํ–ฅ ํ†ต์‹ ๋งŒ ๊ฐ€๋Šฅ
  • ํ์™€ ๊ฐ™์€ FIFO ๊ตฌ์กฐ

1.3 ๋ฐ”์ดํŠธ ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ - InputStream, OutputStream

  • ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ๋ฐ์ดํŠธ๋ฅผ ์ „์†ก
  • ๋Œ€์ƒ์— ๋งž๋Š” ์ŠคํŠธ๋ฆผ์„ ์„ ํƒ ํ›„ ์‚ฌ์šฉ
  • ๋ฐ”์ดํŠธ ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ์€ ๋ชจ๋‘ InputStream, OutputStream์˜ ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•œ ์ž์†๋“ค
    • read()์™€ write() ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ ํ›„ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์šฉ

1.4 ๋ณด์กฐ ์ŠคํŠธ๋ฆผ

  • ์ŠคํŠธ๋ฆผ์˜ ๊ธฐ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ฑฐ๋‚˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Œ
    • ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ์ŠคํŠธ๋ฆผ์€ ์•„๋‹ˆ๋ฏ€๋กœ ์ž…์ถœ๋ ฅ ๋ถˆ๊ฐ€๋Šฅ
  • ๋ณด์กฐ ์ŠคํŠธ๋ฆผ์€ ๋ชจ๋‘ FilterInputStream์˜ ์ž์†
    • FilterInputStream์€ InputStream์˜ ์ž์†

1.5 ๋ฌธ์ž ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ - Reader, Writer

  • Java์—์„œ๋Š” charํ˜•์ด 2byte
    • 2byte ๋‹จ์œ„๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฌธ์ž ๊ธฐ๋ฐ˜์˜ ์ŠคํŠธ๋ฆผ์ด Reader, Writer
  • ๋ฐ”์ดํŠธ ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ๊ณผ ์ด๋ฆ„๋งŒ ์กฐ๊ธˆ ๋‹ค๋ฅผ ๋ฟ ํ™œ์šฉ๋ฐฉ๋ฒ•์€ ๊ฑฐ์˜ ๊ฐ™์Œ

2. ๋ฐ”์ดํŠธ ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ

2.1 InputStream๊ณผ OutptStream

  • ๋ชจ๋“  ๋ฐ”์ดํŠธ ๊ธฐ๋ฐ˜์˜ ์ŠคํŠธ๋ฆผ์˜ ์กฐ์ƒ
  • InputStream์—” available(), close(), mark, markSupported(), read(), reset(), skip() ๋“ฑ์˜ ๋ฉ”์„œ๋“œ ์กด์žฌ
  • OutputStream์—” close(), flush(), write() ๋“ฑ์˜ ๋ฉ”์„œ๋“œ ์กด์žฌ

2.2 ByteArrayInputStream๊ณผ ByteArrayOutputStream

  • ๋ฐ”์ดํŠธ ๋ฐฐ์—ด์— ๋ฐ์ดํ„ฐ๋ฅผ ์ž…์ถœ๋ ฅํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ŠคํŠธ๋ฆผ
  • ์ฃผ๋กœ ๋‹ค๋ฅธ ๊ณณ์— ์ž…์ถœ๋ ฅํ•˜๊ธฐ ์ „์— ๋ฐ์ดํ„ฐ๋ฅผ ์ž„์‹œ๋กœ ๋ฐ”์ดํŠธ ๋ฐฐ์—ด์— ๋‹ด์•„์„œ ๋ณ€ํ™˜ ๋“ฑ์˜ ์ž‘์—…์„ ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ
  • ๋ฐ”์ดํŠธ ๋ฐฐ์—ด์€ ์‚ฌ์šฉํ•˜๋Š” ์ž์›์ด ๋ฉ”๋ชจ๋ฆฌ๋ฏ€๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ์‹œ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ์— ์˜ํ•ด ์ž๋™์œผ๋กœ ์ž์› ๋ฐ˜ํ™˜
    • close()๋กœ ๋‹ซ์„ ํ•„์š”๋Š” ์—†์Œ
  • ๋ฐฐ์—ด์„ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” read()์™€ write()๋กœ ์˜ค๋ฒ„ ๋กœ๋”ฉ ๋œ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋” ํšจ์œจ์ ์œผ๋กœ ์ž…์ถœ๋ ฅ ๊ฐ€๋Šฅ
    • ํ•œ ๋ฒˆ์— ๋” ๋งŽ์€ ๋ฌผ๊ฑด์„ ์˜ฎ๊ธฐ๋“ฏ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋งŒํผ ์ฝ๊ฑฐ๋‚˜ ์“ธ ์ˆ˜ ์žˆ์Œ
  • read()์™€ wirte()๊ฐ€ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” IOException์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด try-catch ๋ฌธ์œผ๋กœ ๊ฐ์‹ธ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

2.3 FileInputStream๊ณผ FileOutputStream

  • ํŒŒ์ผ์— ์ž…์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•œ ์ŠคํŠธ๋ฆผ
    • ์‹ค์ œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์ŠคํŠธ๋ฆผ ์ค‘ ํ•˜๋‚˜
  • ํ…์ŠคํŠธ ํŒŒ์ผ์„ ๋‹ค๋ฃจ๋Š” ๊ฒฝ์šฐ์—” ๋ฌธ์ž ๊ธฐ๋ฐ˜์˜ ์ŠคํŠธ๋ฆผ์ธ FileReader/FileWriter๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์ข‹์Œ

3. ๋ฐ”์ดํŠธ ๊ธฐ๋ฐ˜์˜ ๋ณด์กฐ ์ŠคํŠธ๋ฆผ

3.1 FilterInputStream๊ณผ FilterOutputStream

  • ์ž์ฒด์ ์œผ๋กœ ์ž…์ถœ๋ ฅ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๋ณด์กฐ ์ŠคํŠธ๋ฆผ
    • ์ƒ์„ฑ์ž์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ InputStream, OutputStream์ด ๋“ค์–ด๊ฐ€์•ผ ํ•œ๋‹ค.
  • FilterInputStream์˜ ์ƒ์„ฑ์ž๊ฐ€ protected์ด๊ธฐ ๋•Œ๋ฌธ์— ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆœ ์—†๊ณ  ์ƒ์†์„ ํ†ตํ•ด์„œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๋˜์–ด์•ผ ํ•จ

3.2 BufferdInputStream๊ณผ BufferedOutputStream

  • ์ŠคํŠธ๋ฆผ์˜ ์ž…์ถœ๋ ฅ ํšจ์œจ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ณด์กฐ ์ŠคํŠธ๋ฆผ
    • ํšจ์œจ์ ์ด๋ฏ€๋กœ ๋Œ€๋ถ€๋ถ„ ์ž…์ถœ๋ ฅ์— ์‚ฌ์šฉ
  • ๋ฒ„ํผ์˜ ํฌ๊ธฐ๋Š” ์ž…๋ ฅ ์†Œ์Šค๋กœ๋ถ€ํ„ฐ ํ•œ ๋ฒˆ์— ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ํฌ๊ธฐ๋กœ ์ง€์ •ํ•˜๋ฉด ์ข‹์Œ
    • ๋ณดํ†ต ์ž…๋ ฅ ์†Œ์Šค๊ฐ€ ํŒŒ์ผ์ธ ๊ฒฝ์šฐ 8K์˜ ํฌ๊ธฐ๋กœ ํ•˜๋Š” ๊ฒƒ์ด ๋ณดํ†ต
    • ๋ฒ„ํผ์˜ ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•ด๊ฐ€๋ฉด์„œ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ
  • ์™ธ๋ถ€์˜ ์ž…๋ ฅ ์†Œ์Šค๋กœ ๋ถ€ํ„ฐ ์ฝ๋Š” ๊ฒƒ๋ณด๋‹ค ๋‚ด๋ถ€์˜ ๋ฒ„ํผ๋กœ ์ฝ๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋น ๋ฅด๋ฏ€๋กœ ํšจ์œจ์ด ๋†’์Œ
  • BufferedOutputStream์€ ๋ฒ„ํผ๊ฐ€ ๊ฐ€๋“ ์ฐจ๋ฉด ๋ฒ„ํผ์˜ ๋ชจ๋“  ๋‚ด์šฉ์„ ์ถœ๋ ฅ ์†Œ์Šค์— ์ถœ๋ ฅ
    • ์ถœ๋ ฅ ํ›„ ๋ฒ„ํผ๋ฅผ ๋น„์šฐ๊ณ  ์ถœ๋ ฅ์„ ์ €์žฅํ•  ์ค€๋น„
    • ๋งˆ์ง€๋ง‰ ์ถœ๋ ฅ ๋ถ€๋ถ„์ด ์ถœ๋ ฅ ์†Œ์Šค์— ์“ฐ์ด์ง€ ๋ชปํ•  ๊ฒƒ์„ ๋Œ€๋น„ํ•ด close()๋‚˜ flush()๋ฅผ ํ˜ธ์ถœํ•  ๊ฒƒ
  • ๋ณด์กฐ ์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ์—” ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ์˜ flosh()๋‚˜ close()๋ฅผ ํ˜ธ์ถœํ•  ํ•„์š”๊ฐ€ ์—†์Œ
    • ๋ณด์กฐ ์ŠคํŠธ๋ฆผ ๋‚ด๋ถ€์— ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ์˜ close()๊ฐ€ ๊ตฌํ˜„

3.3 DataInputStream๊ณผ DataOutputStream

  • ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ฐ๋Š” ๋ฐ ์žˆ์–ด์„œ byte ๋‹จ์œ„๊ฐ€ ์•„๋‹Œ 8๊ฐ€์ง€ ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์˜ ๋‹จ์œ„๋กœ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ์Œ
  • ์ถœ๋ ฅ ํ˜•์‹์€ ๊ฐ ๊ธฐ๋ณธ ์ž๋ฃŒํ˜• ๊ฐ’์„ 16์ง„์ˆ˜๋กœ ํ‘œํ˜„ํ•˜์—ฌ ์ €์žฅ
  • ์ถœ๋ ฅํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ์ฝ์–ด ์˜ฌ ๋•Œ๋Š” ์ถœ๋ ฅํ–ˆ์„ ๋•Œ์˜ ์ˆœ์„œ๋ฅผ ์—ผ๋‘
  • ์ถœ๋ ฅํ•œ ๊ฐ’๋“ค์€ ์ด์ง„ ๋ฐ์ดํ„ฐ๋กœ ์ €์žฅ๋œ๋‹ค.
    • ๋ฌธ์ž ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ํŒŒ์ผ์„ 16์ง„์ˆ˜ ์ฝ”๋“œ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋‚˜ ByteArrayOutputStream์„ ์‚ฌ์šฉํ•ด์•ผ ํ•จ
    • DataOutputStream์˜ wirte ๋ฉ”์„œ๋“œ๋“ค๋กœ ๊ธฐ๋กํ•œ ๋ฐ์ดํ„ฐ๋Š” DataInputStream์˜ read ๋ฉ”์„œ๋“œ๋กœ ์ฝ์œผ๋ฉด ๋จ
  • ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ๋” ์ด์ƒ ์ฝ์„ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋ฉด EOFException ๋ฐœ์ƒ
    • ์ŠคํŠธ๋ฆผ์„ ๋‹ซ์•„์ค˜์•ผ ํ•จ

3.4 SequenceInputStream

  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์„ ์—ฐ์†์œผ๋กœ ์—ฐ๊ฒฐํ•ด์„œ ํ•˜๋‚˜์˜ ์ŠคํŠธ๋ฆผ์œผ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด ์ฒ˜๋ฆฌ
    • ํฐ ํŒŒ์ผ์„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž‘์€ ํŒŒ์ผ๋กœ ๋‚˜๋ˆ„์—ˆ๋‹ค๊ฐ€ ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ํ•ฉ์น˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ์‚ฌ์šฉ
  • ์ƒ์„ฑ์ž๋กœ Enumeration์ด๋‚˜ ๋‘ ๊ฐœ์˜ ์ŠคํŠธ๋ฆผ์„ ๋ฐ›์Œ

3.5 PrintStream

  • ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ์— ๋‹ค์–‘ํ•œ ํ˜•ํƒœ๋กœ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋Š” print, println, printf์™€ ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„ ๋กœ๋”ฉํ•˜์—ฌ ์ œ๊ณต
  • PrintStream๊ณผ PrintWriter๋Š” ๊ฑฐ์˜ ๊ฐ™์€ ๊ธฐ๋Šฅ์ด์ง€๋งŒ PrintWriter๊ฐ€ ๋‹ค์–‘ํ•œ ์–ธ์–ด์˜ ๋ฌธ์ž๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ์ ํ•ฉํ•˜๋ฏ€๋กœ ๊ฐ€๋Šฅํ•˜๋ฉด PrintWriter๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ
    • JDK1.1๋ถ€ํ„ฐ ์ถ”๊ฐ€๋˜์—ˆ์Œ
  • print(), println()์€ ๋งค์šฐ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋ฏ€๋กœ ์˜ˆ์™ธ๋ฅผ ๋˜์ง€์ง€ ์•Š๊ณ  ๋‚ด๋ถ€์—์„œ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์ •์˜
  • printf()๋Š” JDK1.5๋ถ€ํ„ฐ ์ถ”๊ฐ€๋˜์—ˆ๊ณ  C์–ธ์–ด์™€ ๊ฐ™์ด ํŽธ๋ฆฌํ•œ ํ˜•์‹ํ™”๋œ ์ถœ๋ ฅ์„ ์ง€์›
    • ์˜ต์…˜์˜ ๊ฐœ์ˆ˜์™€ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ผ์น˜ํ•ด์•ผ ํ•จ
    • '์ˆซ์ž$'๋ฅผ ์˜ต์…˜ ์•ž์— ๋ถ™์—ฌ ์ถœ๋ ฅ๋œ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ง€์ • ๊ฐ€๋Šฅ

4. ๋ฌธ์ž ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ

4.1 Reader์™€ Writer

  • ๋ฐ”์ดํŠธ ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ์˜ ์กฐ์ƒ์ธ InputStream, OutputStream๊ณผ ๊ฐ™์€ ์—ญํ• ์„ ๋ฌธ์ž ๊ธฐ๋ฐ˜์˜ ์ŠคํŠธ๋ฆผ์—์„œ ์ˆ˜ํ–‰
  • 2 byte๋กœ ์ŠคํŠธ๋ฆผ์„ ์ฒ˜๋ฆฌํ•˜๋ฉฐ ์ธ์ฝ”๋”ฉ์„ ์ง€์›ํ•ด ์คŒ
    • ์ž๋ฐ”์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์œ ๋‹ˆ์ฝ”๋“œ ๊ฐ„์˜ ๋ณ€ํ™˜์„ ์ž๋™์ ์œผ๋กœ ์ฒ˜๋ฆฌ
    • Reader๋Š” ํŠน์ • ์ธ์ฝ”๋”ฉ์„ ์ฝ์–ด์„œ ์œ ๋‹ˆ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜
    • Writer๋Š” ์œ ๋‹ˆ์ฝ”๋“œ๋ฅผ ํŠน์ • ์ธ์ฝ”๋”ฉ์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ €์žฅ

4.2 FileReader์™€ FileWriter

  • ํŒŒ์ผ๋กœ๋ถ€ํ„ฐ ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ํŒŒ์ผ์„ ์“ฐ๋Š”๋ฐ ์‚ฌ์šฉ

4.3 PipedReader์™€ PipedWriter

  • ์Šค๋ ˆ๋“œ ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ๋•Œ ์‚ฌ์šฉ
  • ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์„ ํ•˜๋‚˜์˜ ์ŠคํŠธ๋ฆผ์œผ๋กœ ์—ฐ๊ฒฐํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์Œ
  • ์‚ฌ์šฉ๋ฒ•
    • ์ŠคํŠธ๋ฆผ ์ƒ์„ฑ ํ›„ ํ•œ์ชฝ ์Šค๋ ˆ๋“œ์—์„œ connect()๋ฅผ ํ˜ธ์ถœํ•ด์„œ ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ๊ณผ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์„ ์—ฐ๊ฒฐ
    • ์ž…์ถœ๋ ฅ์„ ๋งˆ์นœ ํ›„์—๋Š” ์–ด๋Š ํ•œ์ชฝ ์ŠคํŠธ๋ฆผ๋งŒ ๋‹ซ์•„๋„ ๋‚˜๋จธ์ง€ ์ŠคํŠธ๋ฆผ์€ ์ž๋™์œผ๋กœ ๋‹ซํž˜

4.4 StringReader์™€ StringWriter

  • ์ž…์ถœ๋ ฅ ๋Œ€์ƒ์ด ๋ฉ”๋ชจ๋ฆฌ์ธ ์ŠคํŠธ๋ฆผ
  • StringWriter์— ์ถœ๋ ฅ๋˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ๋‚ด๋ถ€์˜ StringBuffer์— ์ €์žฅ
    • getBuffer(), toString() ๋“ฑ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์–ป์–ด์˜ฌ ์ˆ˜ ์žˆ์Œ

5. ๋ฌธ์ž ๊ธฐ๋ฐ˜์˜ ๋ณด์กฐ ์ŠคํŠธ๋ฆผ

5.1 BufferedReader์™€ BufferdWriter

  • ๋ฒ„ํผ๋ฅผ ์ด์šฉํ•ด์„œ ์ž…์ถœ๋ ฅ์˜ ํšจ์œจ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ์—ญํ• 
    • ๋ฒ„ํผ๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ๋น„๊ตํ•  ์ˆ˜ ์—†์„ ์ •๋„๋กœ ํšจ์œจ์ด ์ข‹์•„์ง„๋‹ค.
  • BufferedReader์˜ readLine()์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๋ผ์ธ ๋‹จ์œ„๋กœ ์ฝ์„ ์ˆ˜ ์žˆ์Œ
  • BufferWriter๋Š” newLine()์ด๋ผ๋Š” ์ค„๋ฐ”๊ฟˆ์„ ํ•ด์ฃผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ

5.2 InputStreamReader์™€ OutputStreamWriter

  • ๋ฐ”์ดํŠธ ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ์„ ๋ฌธ์ž ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ์œผ๋กœ ์—ฐ๊ฒฐํ•ด ์ฃผ๋Š” ์—ญํ• 
  • ๋ฐ”์ดํŠธ ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์ •๋œ ์ธ์ฝ”๋”ฉ์˜ ๋ฌธ์ž ๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ž‘์—… ์ˆ˜ํ–‰
  • ์ƒ์„ฑ์ž๋กœ ์ŠคํŠธ๋ฆผ๊ณผ ์ธ์ฝ”๋”ฉ์„ ๋„ฃ์„ ์ˆ˜ ์žˆ์Œ
    • ์ธ์ฝ”๋”ฉ์„ ์ง€์ •ํ•ด ์ฃผ์ง€ ์•Š๋Š”๋‹ค๋ฉด OS์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ธ์ฝ”๋”ฉ์„ ์‚ฌ์šฉ
    • ํ•œ๊ธ€ ์œˆ๋„์šฐ์—์„œ ์ค‘๊ตญ์–ด๋กœ ์ž‘์„ฑ๋œ ํŒŒ์ผ์„ ์ฝ๋Š” ์ƒํ™ฉ ๋“ฑ์—์„œ ์ธ์ฝ”๋”ฉ์„ ์•Œ๋งž๊ฒŒ ์ง€์ •ํ•ด ์ฃผ์–ด์•ผ ํ•จ
  • getEncoding()์œผ๋กœ ์‚ฌ์šฉ ์ค‘์ธ OS์˜ ์ธ์ฝ”๋”ฉ ํ™•์ธ ๊ฐ€๋Šฅ

6. ํ‘œ์ค€ ์ž…์ถœ๋ ฅ๊ณผ File

6.1 ํ‘œ์ค€ ์ž…์ถœ๋ ฅ - System.in, System.out, System.err

  • ํ‘œ์ค€ ์ž…์ถœ๋ ฅ์ด๋ž€?
    • ์ฝ˜์†”(console, ๋„์Šค์ฐฝ)์„ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์ž…๋ ฅ๊ณผ ์ฝ˜์†”๋กœ์˜ ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ์„ ์˜๋ฏธ
  • ์ž๋ฐ”์—์„  ํ‘œ์ค€ ์ž…์ถœ๋ ฅ์„ ์œ„ํ•ด 3๊ฐ€์ง€ ์ž…์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์„ ์ œ๊ณต
    • System.in, System.out, System.err
    • ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณ„๋„๋กœ ์ŠคํŠธ๋ฆผ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ํ•„์š” X
    • ์ž๋ฐ” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹คํ–‰๊ณผ ๋™์‹œ์— ์ž๋™์ ์œผ๋กœ ์ƒ์„ฑ
  • System.in : ์ฝ˜์†”๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋ฐ ์‚ฌ์šฉ
  • System.out : ์ฝ˜์†”๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ
  • System.err : ์ฝ˜์†”๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ
  • ๋ชจ๋‘ System ํด๋ž˜์Šค์— ์„ ์–ธ๋œ ํด๋ž˜์Šค ๋ณ€์ˆ˜
  • BufferdInputStream๊ณผ BufferdOutputStream์„ ์‚ฌ์šฉ
  • ์ฝ˜์†” ์ž…๋ ฅ
    • ๋ฒ„ํผ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Backspace๋ฅผ ์ด์šฉํ•ด์„œ ํŽธ์ง‘ ๊ฐ€๋Šฅ
    • Enter ํ‚ค๋‚˜ ์ž…๋ ฅ์˜ ๋์„ ์•Œ๋ฆฌ๋Š” '^z'๋ฅผ ๋ˆ„๋ฅด๊ธฐ ์ „๊นŒ์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅ ์ค‘์ธ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ
    • '^z'๋ฅผ ๋ˆ„๋ฅผ ์‹œ read()๊ฐ€ -1์„ ๋ฐ˜ํ™˜
    • Enter๋ฅผ ๋ˆ„๋ฅด๋ฉด ์บ๋ฆฌ์ง€๋ฆฌํ„ด๊ณผ ์ค„ ๋ฐ”๊ฟˆ ๋ฌธ์ž๋„ ์‚ฌ์šฉ์žํ‚ค๋กœ ์ธ์‹๋จ -> BufferedReader์˜ newLine()์„ ํ†ตํ•ด ๋ผ์ธ ๋‹จ์œ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๋Š” ๊ฒƒ์œผ๋กœ ํ•ด๊ฒฐ

6.2 ํ‘œ์ค€ ์ž…์ถœ๋ ฅ์˜ ๋Œ€์ƒ ๋ณ€๊ฒฝ - setOut(), setErr(), setIn()

  • setOut(), setErr(), setIn()์„ ์‚ฌ์šฉํ•ด ์ž…์ถœ๋ ฅ์„ ์ฝ˜์†” ์ด์™ธ์— ๋‹ค๋ฅธ ์ž…์ถœ๋ ฅ ๋Œ€์ƒ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅ
  • ์„ ์–ธํ•œ ๋ฉ”์„œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋“ค์–ด ์žˆ๋Š” ์ŠคํŠธ๋ฆผ์œผ๋กœ ์ž…๋ ฅ ๋ฐ ์ถœ๋ ฅ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
  • ๋ฉ”์„œ๋“œ๋ฅผ ์„ ์–ธํ•˜๋Š” ๋ฐฉ๋ฒ• ์™ธ์—๋„ ์ปค๋งจ๋“œ ๋ผ์ธ์—์„œ ํ‘œ์ค€ ์ž…์ถœ๋ ฅ์˜ ๋Œ€์ƒ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Œ
    • '>' : System.out์˜ ์ถœ๋ ฅ์„ ์ฝ˜์†”์ด ์•„๋‹Œ ๋‹ค๋ฅธ ๊ณณ์œผ๋กœ ์ง€์ •, ๊ธฐ์กด์˜ ๋‚ด์šฉ ์‚ญ์ œ
    • '>>' : System.out์˜ ์ถœ๋ ฅ์„ ์ฝ˜์†”์ด ์•„๋‹Œ ๋‹ค๋ฅธ ๊ณณ์œผ๋กœ ์ง€์ •, ๊ธฐ์กด์˜ ๋‚ด์šฉ์— ์ƒˆ๋กœ์šด ๋‚ด์šฉ ์ถ”๊ฐ€
    • '<' : ํ‘œ์ค€ ์ž…๋ ฅ์„ ์ฝ˜์†”์ด ์•„๋‹Œ ๋‹ค๋ฅธ ๊ณณ์œผ๋กœ ์ง€์ •

6.3 RandomAccessFile

  • RandomAccessFile์€ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋กœ ํŒŒ์ผ์— ๋Œ€ํ•œ ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์„ ๋ชจ๋‘ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋˜์–ด์žˆ์Œ
  • ๊ธฐ๋ณธ ์ž๋ฃŒํ˜• ๋‹จ์œ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ์Œ (DataInputStream, DataOutputStream ๊ตฌํ˜„)
  • RandomAccessFile ํด๋ž˜์Šค๋Š” ํŒŒ์ผ์˜ ์–ด๋Š ์œ„์น˜์—๋‚˜ ์ฝ๊ณ  ์“ฐ๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด ๊ฐ€์žฅ ํฐ ์žฅ์ 
    • ์œ„์น˜์— ์ œํ•œ์ด X
    • ๋‹ค๋ฅธ ์ž…์ถœ๋ ฅ ํด๋ž˜์Šค๋“ค์€ ์ž…์ถœ๋ ฅ ์†Œ์Šค์— ์ˆœ์ฐจ์ ์œผ๋กœ ์ฝ๊ธฐ/์“ฐ๊ธฐ๋ฅผ ํ•จ
    • ๋‚ด๋ถ€์ ์œผ๋กœ ํŒŒ์ผ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉ
  • getFilePointer()๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ํฌ์ธํŠธ ์œ„์น˜๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Œ
  • write ์ดํ›„์—” ํŒŒ์ผ ํฌ์ธํ„ฐ๋ฅผ ์ฒ˜์Œ์œผ๋กœ ์ด๋™์‹œํ‚จ ๋‹ค์Œ์— read์— ๊ด€ํ•œ ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ
    • seek(0)๋กœ ์ด๋™

6.4 File

  • ๊ธฐ๋ณธ์ ์ด๋ฉด์„œ๋„ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์ž…์ถœ๋ ฅ ๋Œ€์ƒ
  • ์ž๋ฐ”์—์„œ๋Š” File ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ํŒŒ์ผ๊ณผ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก ์ง€์›
    • File ์ธ์Šคํ„ด์Šค๋Š” ํŒŒ์ผ ์ผ ์ˆ˜๋„ ์žˆ๊ณ  ๋””๋ ‰ํ† ๋ฆฌ์ผ ์ˆ˜๋„ ์žˆ๋‹ค.
    • ์ƒ์„ฑ์ž์— ๊ฒฝ๋กœ์™€ ํŒŒ์ผ ์ด๋ฆ„์„ ๋„ฃ์„ ์ˆ˜ ์žˆ์Œ (๊ฒฝ๋กœ๊ฐ€ ์—†์„ ์‹œ ํ˜„์žฌ ์‹คํ–‰๋˜๋Š” ์œ„์น˜๋ฅผ ๊ฒฝ๋กœ๋กœ)
  • ๊ฒฝ๋กœ์˜ ๊ตฌ๋ถ„์ž๋Š” OS๋งˆ๋‹ค ๋‹ค๋ฅด๋ฏ€๋กœ ํด๋ž˜์Šค ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•จ
  • ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋Š” ํŒŒ์ผ์‹œ์Šคํ…œ์˜ ๋ฃจํŠธ๋กœ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ํŒŒ์ผ์˜ ์ „์ฒด ๊ฒฝ๋กœ๋ฅผ ์˜๋ฏธ
    • ๊ธฐํ˜ธ๋‚˜ ๋งํฌ ๋“ฑ์„ ํฌํ•จํ•˜์ง€ ์•Š๋Š” ์œ ์ผํ•œ ๊ฒฝ๋กœ๋ฅผ ์ •๊ทœ ๊ฒฝ๋กœ๋ผ๊ณ  ํ•จ
  • ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„  ์šฐ์„  File ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•œ ํ›„์—, ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ createNewFile()์„ ํ˜ธ์ถœ
  • ๋””๋ ‰ํ† ๋ฆฌ์— ํฌํ•จ๋œ ํŒŒ์ผ๊ณผ ์„œ๋ธŒ ๋””๋ ‰ํ† ๋ฆฌ์˜ ๋ชฉ๋ก๋„ ํ™•์ธ ๊ฐ€๋Šฅ
  • accept ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” FilenameFilter๋ฅผ ์‚ฌ์šฉํ•ด ํŠน์ • ์กฐ๊ฑด์— ๋งž๋Š” ํŒŒ์ผ์˜ ๋ชฉ๋ก์„ ์–ป์„ ์ˆ˜๋„ ์žˆ์Œ
  • delete() ๋ฉ”์„œ๋“œ๋กœ ์‚ญ์ œ, renameTo()๋ฅผ ์ด์šฉํ•ด์„œ ํŒŒ์ผ์˜ ์ด๋ฆ„๋„ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ

7. ์ง๋ ฌํ™”(Serialization)

  • ์ง๋ ฌํ™”๋Š” ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์ปดํ“จํ„ฐ ๊ฐ„์— ์„œ๋กœ ๊ฐ์ฒด๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๊ฒƒ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์คŒ

7.1 ์ง๋ ฌํ™”๋ž€?

  • ๊ฐ์ฒด๋ฅผ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ
    • ๊ฐ์ฒด์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ŠคํŠธ๋ฆผ์— ์“ฐ๊ธฐ ์œ„ํ•ด ์—ฐ์†์ ์ธ ๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ
  • ์ŠคํŠธ๋ฆผ์œผ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์„œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ์—ญ์ง๋ ฌํ™”
  • ๊ฐ์ฒด์˜ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์ €์žฅ ํ›„ ์ €์žฅํ–ˆ๋˜ ๊ฐ์ฒด๋ฅผ ๋‹ค์‹œ ์ƒ์„ฑํ•  ๋•Œ๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ ํ›„์— ์ €์žฅํ•œ ๊ฐ’์„ ์ฝ์–ด์˜ค๋Š” ๋ฐฉ์‹
    • ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ์ฐธ์กฐํ˜•์ผ ๋•Œ๋Š” ๋ณต์žกํ•จ

7.2 ObjectInputStream, ObjectOutputStream

  • ์ง๋ ฌํ™”์—” ObjectInputStream ์‚ฌ์šฉ
  • ์—ญ์ง๋ ฌํ™”์—” ObjectOutputStream ์‚ฌ์šฉ
  • ๋‘ ๊ฐœ ๋ชจ๋‘ ๋ณด์กฐ ์ŠคํŠธ๋ฆผ์ด๋ฏ€๋กœ ๊ธฐ๋ฐ˜ ์ŠคํŠธ๋ฆผ์„ ์ง€์ •ํ•ด ์ฃผ์–ด์•ผ ํ•จ
  • readObject()์˜ ๋ฐ˜ํ™˜ ํƒ€์ž…์€ Object์ด๋ฏ€๋กœ ํ˜•๋ณ€ํ™˜์ด ํ•„์š”
  • ์ž๋™ ์ง๋ ฌํ™”๊ฐ€ ํŽธ๋ฆฌํ•˜๊ธด ํ•˜์ง€๋งŒ ์ง๋ ฌํ™” ์ž‘์—… ์‹œ๊ฐ„์„ ๋‹จ์ถ•์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ง๋ ฌํ™”ํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฐ์ฒด์˜ ํด๋ž˜์Šค์— writeObject์™€ readObject๋ฅผ ๊ตฌํ˜„ํ•ด ์ฃผ์–ด์•ผ ํ•จ

7.3 ์ง๋ ฌํ™”๊ฐ€ ๊ฐ€๋Šฅํ•œ ํด๋ž˜์Šค ๋งŒ๋“ค๊ธฐ - Serializable, transient

  • ์ง๋ ฌํ™”๊ฐ€ ๊ฐ€๋Šฅํ•œ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„  Serializable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„
  • Serializable์€ ์•„๋ฌด๋Ÿฐ ๋‚ด์šฉ์ด ์—†๋Š” ๋นˆ ์ธํ„ฐํŽ˜์ด์Šค
    • ์ง๋ ฌํ™”๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ์ž‘์„ฑํ•œ ํด๋ž˜์Šค์ธ์ง€๋ฅผ ํŒ๋‹จํ•ด ์ฃผ๋Š” ๊ธฐ์ค€
    • Serializable์„ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค์˜ ์ž์†์€ Serializable์„ ๊ตฌํ˜„ํ•  ํ•„์š” ์—†์Œ
    • ์กฐ์ƒ ํด๋ž˜์Šค์—์„œ Serializable๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์œผ๋ฉด ์กฐ์ƒ์˜ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋“ค์ด ์ง๋ ฌํ™” ๋Œ€์ƒ์— ํฌํ•จ๋˜์ง€ ์•Š์Œ (์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ถ”๊ฐ€ํ•ด์•ผ ํ•จ)
  • ์ง๋ ฌํ™”ํ•  ์ˆ˜ ์—†๋Š” ํด๋ž˜์Šค๋Š” ์ง๋ ฌํ™” ์‹œ java.io.NotSerializableException ๋ฐœ์ƒ
    • ๋ชจ๋“  ํด๋ž˜์Šค์˜ ์ตœ๊ณ  ์กฐ์ƒ์ธ Object๋Š” Serializable์„ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ง๋ ฌํ™”ํ•  ์ˆ˜ ์—†์Œ
  • ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜ ํƒ€์ž…์ด ์•„๋‹Œ ์‹ค์ œ๋กœ ์—ฐ๊ฒฐ๋œ ๊ฐ์ฒด์˜ ์ข…๋ฅ˜์— ์˜ํ•ด ์ง๋ ฌํ™”๊ฐ€ ๊ฒฐ์ •๋จ
  • ์ง๋ ฌํ™”ํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฐ์ฒด์˜ ํด๋ž˜์Šค์— ์ง๋ ฌํ™”๊ฐ€ ์•ˆ ๋˜๋Š” ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์„ ์‹œ ์ œ์–ด์ž transient๋ฅผ ๋ถ™์—ฌ์„œ ์ง๋ ฌํ™” ๋Œ€์ƒ์—์„œ ์ œ์™ธ๋˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Œ
  • ์—ญ์ง๋ ฌํ™” ์‹œ ์ง๋ ฌํ™”ํ–ˆ๋˜ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•จ
    • ์ด๋Ÿฐ ์ด์œ ๋กœ ๊ฐ์ฒด๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ ์ง๋ ฌํ™” ํ•˜๊ธฐ๋ณด๋‹จ ArrayList์™€ ๊ฐ™์€ ์ปฌ๋ ‰์…˜์— ์ €์žฅํ•ด์„œ ์ง๋ ฌํ™”ํ•˜๋Š” ๊ฒŒ ์ข‹์Œ
  • private void writeObject(ObjectOutputStream out), private void readObject(ObjectInputStream in)์„ ๊ตฌํ˜„ํ•˜์—ฌ ์กฐ์ƒ์œผ๋กœ๋ถ€ํ„ฐ ์ƒ์†๋ฐ›์€ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์ง๋ ฌํ™”๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Œ

7.4 ์ง๋ ฌํ™” ๊ฐ€๋Šฅํ•œ ํด๋ž˜์Šค์˜ ๋ฒ„์ „ ๊ด€๋ฆฌ

  • ํด๋ž˜์Šค์˜ ์ด๋ฆ„์ด ๊ฐ™๋”๋ผ๋„ ํด๋ž˜์Šค์˜ ๋‚ด์šฉ์ด ๋ณ€๊ฒฝ๋œ ๊ฒฝ์šฐ ์—ญ์ง๋ ฌํ™”๋Š” ์‹คํŒจํ•˜๋ฉฐ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•จ
    • ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ์ฒด๊ฐ€ ์ง๋ ฌํ™”๋  ๋•Œ ํด๋ž˜์Šค์— ์ •์˜๋œ ๋ฉค๋ฒ„๋“ค์˜ ์ •๋ณด๋ฅผ ์ด์šฉํ•ด์„œ serialVersionUID๋ผ๋Š” ํด๋ž˜์Šค์˜ ๋ฒ„์ „์„ ์ž๋™ ์ƒ์„ฑํ•ด์„œ ์ง๋ ฌํ™” ๋‚ด์šฉ์— ํฌํ•จ
    • ์—ญ์ง๋ ฌํ™” ์‹œ ํด๋ž˜์Šค์˜ ๋ฒ„์ „์„ ๋น„๊ตํ•จ์œผ๋กœ์จ ์ง๋ ฌํ™”ํ•  ๋•Œ์˜ ํด๋ž˜์Šค ๋ฒ„์ „๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธ
  • static ๋ณ€์ˆ˜, ์ƒ์ˆ˜, transient๋Š” ์ง๋ ฌํ™”์— ์˜ํ–ฅ์„ ๋ผ์น˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํด๋ž˜์Šค์˜ ๋ฒ„์ „์„ ๋‹ค๋ฅด๊ฒŒ ์ธ์‹ํ•˜๋„๋ก ํ•  ํ•„์š” X
  • ํด๋ž˜์Šค๊ฐ€ ์กฐ๊ธˆ๋งŒ ๋ณ€๊ฒฝ๋˜์–ด๋„ ์žฌ๋ฐฐํฌํ•˜๋Š” ๊ฒŒ ์–ด๋ ค์šด ๊ฒฝ์šฐ ํด๋ž˜์Šค์˜ ๋ฒ„์ „์„ ์ˆ˜๋™์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ
    • static final long serialVersionUID๋ฅผ ์ถ”๊ฐ€๋กœ ์ •์˜
    • ์ •์˜ ์‹œ ๋ฒ„์ „์ด ์ž๋™ ์ƒ์„ฑ๋œ ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Œ
    • ๋ณดํ†ต ํด๋ž˜์Šค๋ผ๋ฆฌ ๋‹ค๋ฅธ ๊ฐ’์„ ๊ฐ–์ง€ ์•Š๋„๋ก serialver.exe๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ƒ์„ฑ๋œ ๊ฐ’์„ ์‚ฌ์šฉ (ํด๋ž˜์Šค์˜ ์ •๋ณด๋กœ UID๋ฅผ ์ƒ์„ฑ ํ˜น์€ ๊ฐ’์„ ์กฐํšŒ ๊ฐ€๋Šฅ)