์ž๋ฐ” IO

Dearยท2025๋…„ 6์›” 2์ผ

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
33/74

๐Ÿ’™ ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ๊ณผ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ

ํ”„๋กœ๊ทธ๋žจ์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅ๋ฐ›์„ ๋•Œ์—๋Š” ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ(InputStream)์ด๋ผ ๋ถ€๋ฅด๊ณ , ํ”„๋กœ๊ทธ๋žจ์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ ๋•Œ์—๋Š” ์ถœ๋ ฅ(OutptutStream)์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

๐Ÿ’™ InputStream

InputStream์€ ๋ฐ”์ดํŠธ ๊ธฐ๋ฐ˜ ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์˜ ์ตœ์ƒ์œ„ ํด๋ž˜์Šค๋กœ ์ถ”์ƒ ํด๋ž˜์Šค์ด๋‹ค.

read() ๋ฉ”์†Œ๋“œ

read()๋Š” ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์œผ๋กœ๋ถ€ํ„ฐ 1๋ฐ”์ดํŠธ๋ฅผ ์ฝ๊ณ  4๋ฐ”์ดํŠธ int ํƒ€์ž…์œผ๋กœ ๋ฆฌํ„ดํ•œ๋‹ค. ๋ฆฌํ„ดํ•œ 4๋ฐ”์ดํŠธ ์ค‘ ๋์˜ 1๋ฐ”์ดํŠธ์—๋งŒ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์žˆ๋‹ค.

์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์—์„œ 5๊ฐœ์˜ ๋ฐ”์ดํŠธ๊ฐ€ ๋“ค์–ด์˜จ๋‹ค๋ฉด read() ๋ฉ”์†Œ๋“œ๋กœ 1๋ฐ”์ดํŠธ์”ฉ 5๋ฒˆ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.

๋” ์ด์ƒ ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์œผ๋กœ๋ถ€ํ„ฐ ๋ฐ”์ดํŠธ๋ฅผ ์ฝ์„ ์ˆ˜ ์—†๋‹ค๋ฉด read()๋Š” -1์„ ๋ฆฌํ„ดํ•œ๋‹ค. ์ด๊ฒƒ์„ ์ด์šฉํ•˜๋ฉด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋งˆ์ง€๋ง‰ ๋ฐ”์ดํŠธ๊นŒ์ง€ ๋ฃจํ”„๋ฅผ ๋Œ๋ฉฐ ํ•œ ๋ฐ”์ดํŠธ์”ฉ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.

read(byte[] b) ๋ฉ”์†Œ๋“œ

์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์œผ๋กœ๋ถ€ํ„ฐ ๋งค๊ฐœ๊ฐ’์œผ๋กœ ์ฃผ์–ด์ง„ ๋ฐ”์ดํŠธ ๋ฐฐ์—ด(b)์˜ ๊ธธ์ด๋งŒํ‹ˆ ๋ฐ”์ดํŠธ๋ฅผ ์ฝ๊ณ  ๋ฐฐ์—ด์— ์ €์žฅํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ฝ์€ ๋ฐ”์ดํŠธ ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค. ์‹ค์ œ๋กœ ์ฝ์€ ๋ฐ”์ดํŠธ ์ˆ˜๊ฐ€ ๊ธธ์ด๋ณด๋‹ค ์ž‘์„ ๊ฒฝ์šฐ ์ฝ์€ ์ˆ˜๋งŒํผ๋งŒ ๋ฆฌํ„ดํ•œ๋‹ค.

์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์—์„œ 5๊ฐœ์˜ ๋ฐ”์ดํŠธ๊ฐ€ ๋“ค์–ด์˜จ๋‹ค๋ฉด ๊ธธ์ด 3์ธ ๋ฐ”์ดํŠธ ๋ฐฐ์—ด๋กœ ๋‘ ๋ฒˆ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.

์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์œผ๋กœ๋ถ€ํ„ฐ ๋ฐ”์ดํŠธ๋ฅผ ๋” ์ด์ƒ ์ฝ์„ ์ˆ˜ ์—†๋‹ค๋ฉด -1์„ ๋ฆฌํ„ดํ•œ๋‹ค.

์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์œผ๋กœ๋ถ€ํ„ฐ 100๊ฐœ์˜ ๋ฐ”์ดํŠธ๊ฐ€ ๋“ค์–ด์˜จ๋‹ค๋ฉด read() ๋ฉ”์†Œ๋“œ๊ฐ€ 100๋ฒˆ ๋ฃจํ•‘ํ•ด์„œ ์ฝ๋Š”๋‹ค(100๋ฒˆ ์‹คํ–‰๋œ๋‹ค๋Š” ๋ง)

read(byte[] b) ๋ฉ”์†Œ๋“œ๋Š” ํ•œ ๋ฒˆ ์ฝ์„๋•Œ ๋ฐฐ์—ด ๊ธธ์ด ๋งŒํผ ์ฝ๊ธฐ ๋•Œ๋ฌธ์— ๋ฃจํ•‘ ํšŸ์ˆ˜๊ฐ€ ์ค„์–ด๋“ ๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋งŽ์€ ์–‘์˜ ๋ฐ”์ดํŠธ๋ฅผ ์ฝ์„ ๋•Œ๋Š” read(byte[] b) ์‚ฌ์šฉํ•œ๋‹ค.

read(byte[] b, int off, int len) ๋ฉ”์†Œ๋“œ

์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์œผ๋กœ๋ถ€ํ„ฐ len๊ฐœ์˜ ๋ฐ”์ดํŠธ๋งŒํผ ์ฝ๊ณ , ๋ฐ”์ดํŠธ ๋ฐฐ์—ด b[off] ๋ถ€ํ„ฐ len๊ฐœ๊นŒ์ง€ ์ €์žฅํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ฝ์€ ๋ฐ”์ดํŠธ ์ˆ˜์ธ len๊ฐœ๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค. ์‹ค์ œ ์ฝ์€ ๋ฐ”์ดํŠธ ์ˆ˜๊ฐ€ len๊ฐœ๋ณด๋‹ค ์ž‘์„ ๊ฒฝ์šฐ ์ฝ์€ ์ˆ˜๋งŒํผ ๋ฆฌํ„ดํ•œ๋‹ค.

๋” ์ด์ƒ ์ฝ์„ ์ˆ˜ ์—†๋‹ค๋ฉด -1์„ ๋ฆฌํ„ดํ•œ๋‹ค.

read(byte[] b)์™€ ์ฐจ์ด์ ์€ ํ•œ ๋ฒˆ์— ์ฝ๋Š” ๋ฐ”์ดํŠธ ์ˆ˜๋ฅผ len ๋งค๊ฐœ๊ฐ’์œผ๋กœ ์กฐ์ ˆ ํ•  ์ˆ˜ ์žˆ๊ณ  ๋ฐฐ์—ด์—์„œ ์ €์žฅ์ด ์‹œ์ž‘๋˜๋Š” ์ธ๋ฑ์Šค(off)๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค.

close() ๋ฉ”์†Œ๋“œ

InputStream์„ ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ์—๋Š” close() ๋ฉ”์†Œ๋“œ ์‚ฌ์šฉํ•œ๋‹ค.

๐Ÿ’™ OutputStream

๋ฐ”์ดํŠธ ๊ธฐ๋ฐ˜ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์˜ ์ตœ์ƒ์œ„ ํด๋ž˜์Šค๋กœ ์ถ”์ƒ ํด๋ž˜์Šค์ด๋‹ค.

write(int b) ๋ฉ”์†Œ๋“œ

๋งค๊ฐœ ๋ณ€์ˆ˜ int b ๊ฐ’์—์„œ ๋์— ์žˆ๋Š” 1๋ฐ”์ดํŠธ๋งŒ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ณด๋‚ธ๋‹ค. ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ Int ํƒ€์ž…์ด๋ผ๊ณ  4๋ฐ”์ดํŠธ ๋ชจ๋‘๋ฅผ ๋ณด๋‚ด๋Š”๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

write(byte[] b) ๋ฉ”์†Œ๋“œ

๋งค๊ฐœ๊ฐ’์œผ๋กœ ์ฃผ์–ด์ง„ ๋ฐ”์ดํŠธ ๋ฐฐ์—ด์˜ ๋ชจ๋“  ๋ฐ”์ดํŠธ๋ฅผ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ณด๋‚ธ๋‹ค.

write(byte[] b, int off, int len) ๋ฉ”์†Œ๋“œ

b๋ฐฐ์—ด์—์„œ off๋ถ€ํ„ฐ len๊ฐœ์˜ ๋ฐ”์ดํŠธ๋ฅผ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ณด๋‚ธ๋‹ค.

flush()์™€ close() ๋ฉ”์†Œ๋“œ

์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์€ ๋‚ด๋ถ€์— ์ž‘์€ ๋ฒ„ํผ(buffer)๊ฐ€ ์žˆ์–ด์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ถœ๋ ฅ๋˜๊ธฐ ์ „์— ๋ฒ„ํผ์— ์Œ“์—ฌ์žˆ๋‹ค๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅ๋œ๋‹ค.
flush() ๋ฉ”์†Œ๋“œ๋Š” ๋ฒ„ํผ์— ์ž”๋ฅ˜ํ•˜๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ์ถœ๋ ฅ์‹œํ‚ค๊ณ  ๋ฒ„ํผ๋ฅผ ๋น„์šฐ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
๋” ์ด์ƒ ์ถœ๋ ฅํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋‹ค๋ฉด flush() ํ˜ธ์ถœ ํ›„ close() ํ˜ธ์ถœํ•œ๋‹ค.

๐Ÿ’™ ์ง๋ ฌํ™”

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

๊ฐ์ฒด์˜ ํ•„๋“œ๋งŒ ์ง๋ ฌํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋ฉ”์†Œ๋“œ๋‚˜ ์ •์  ํ•„๋“œ๋Š” ์ง๋ ฌํ™”๋˜์ง€ ์•Š๋Š”๋‹ค.
โ€˜transientโ€™ ํ‚ค์›Œ๋“œ๋กœ ์ง€์ •๋œ ๊ฒฝ์šฐ๋„ ์ง๋ ฌํ™”๋˜์ง€ ์•Š๋Š”๋‹ค.

๐Ÿ’™ ๋ฆฌํ”Œ๋ ‰์…˜(Reflection)

๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘์— ์ž๋ฐ” ํด๋ž˜์Šค์˜ ์ •๋ณด๋ฅผ ๊ฒ€์‚ฌํ•˜๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ์„ ๋งํ•œ๋‹ค. Java์˜ ๋ฆฌํ”Œ๋ ‰์…˜ API๋Š” java.lang.reflect ํŒจํ‚ค์ง€์— ์ •์˜๋˜์–ด ์žˆ๋‹ค.

๋ฆฌํ”Œ๋ ‰์…˜ ์ฃผ์š” ๊ธฐ๋Šฅ

  1. ํด๋ž˜์Šค ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ: ํด๋ž˜์Šค์˜ ์ด๋ฆ„, ํ•„๋“œ, ๋ฉ”์„œ๋“œ, ์ƒ์„ฑ์ž ๋“ฑ์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
  2. ๋™์ ์œผ๋กœ ๊ฐ์ฒด ์ƒ์„ฑ: Class ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
  3. ํ•„๋“œ ๊ฐ’ ์ฝ๊ธฐ ๋ฐ ์„ค์ •: Field ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ํ•„๋“œ์˜ ๊ฐ’์„ ์ฝ๊ฑฐ๋‚˜ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  4. ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ: Method ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.
  5. ์ƒ์„ฑ์ž ํ˜ธ์ถœ: Constructor ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

  • ์‹คํ–‰ ์‹œ์— ๋™์ ์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ๋กœ๋“œํ•˜๊ณ  ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ
  • ํด๋ž˜์Šค์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์‚ฌํ•˜๊ณ  ์กฐ์ž‘ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ
  • ๋Ÿฐํƒ€์ž„ ์‹œ์— ํด๋ž˜์Šค์˜ ๋™์ž‘์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ํ™•์žฅํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ

์ฃผ์˜์‚ฌํ•ญ

  • ๋ฆฌํ”Œ๋ ‰์…˜์„ ๋‚จ์šฉํ•˜๋ฉด ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง€๊ณ  ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค.
  • ์ปดํŒŒ์ผ ์‹œ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์—†๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ’™ ==(๋™์ผ์„ฑ) , equals()(๋™๋“ฑ์„ฑ) ์ฐจ์ด

equals() ๋Š” ๋‚ด์šฉ์„ ๋น„๊ตํ•˜๊ณ  == ๋Š” ์ฃผ์†Œ ๊ฐ’์„ ๋น„๊ตํ•œ๋‹ค.

=== ๋Š” ์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ์—์„œ๋งŒ ์‚ฌ์šฉํ•œ๋‹ค. ๊ฐ’๊ณผ ๋ฐ์ดํ„ฐ ํ˜•์‹์ด ๋ชจ๋‘ ๊ฐ™์€์ง€ ์—„๊ฒฉํ•˜๊ฒŒ ๋น„๊ตํ•œ๋‹ค.
equals() ๋Œ€์‹  ์‚ฌ์šฉ

๐ŸคํšŒ๊ณ 

์ฒ˜์Œ ์ž๋ฐ”๋ฅผ ๋ฐฐ์šธ ๋•Œ๋ถ€ํ„ฐ ์ต์ˆ™ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋˜ ํด๋ž˜์Šค์™€ ๋ฉ”์†Œ๋“œ๋“ค์ด์—ˆ๋‹ค. ์ด๋ฒˆ์— ๋‹ค์‹œ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ๊ทธ๋™์•ˆ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์“ฐ๊ธฐ๋งŒ ํ–ˆ๋˜ ์ฝ”๋“œ์˜ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.
์ต์ˆ™ํ–ˆ๋˜ ๋ฌธ๋ฒ•์ด ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์•Œ๊ฒŒ ๋˜๋‹ˆ ๋” ๊นŠ์ด ์žˆ๋Š” ํ•™์Šต์ด ๊ฐ€๋Šฅํ•ด์กŒ๋‹ค.

profile
์นœ์• ํ•˜๋Š” ๊ฐœ๋ฐœ์ž

0๊ฐœ์˜ ๋Œ“๊ธ€