Java/Java์ ์ ์
Chapter 15 - ์ ์ถ๋ ฅ I/O
vividswan
2022. 5. 19. 08:02
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๋ฅผ ์์ฑ ํน์ ๊ฐ์ ์กฐํ ๊ฐ๋ฅ)