์ถ์ฒ
https://blog.naver.com/jwyoon25/221300691133
Head First Java
ChatGPT
https://www.geeksforgeeks.org/java-io-tutorial/
์คํธ๋ฆผ์ด๋
๋ฐ์ดํฐ์ ํ๋ฆ์ด๋ผ๋ ์ถ์์ ์ธ ๊ฐ๋ . -> ๋ฐ์ดํฐ๊ฐ ์ด๋์ ์ค๋์ง ์ ํ์ ์์ด ๊ฐ์ ธ๋ค ์ฐ๋ ๊ฒ๋ง ์ ๊ฒฝ์ฐ๋ฉด ๋๋ค.
๋ฐ์ดํฐ๋ฅผ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ฐ์์ ์ธ ๋ฐ์ดํฐ์ ๊ฒฝ๋ก
์คํธ๋ฆผ ํต์ฌ ๊ฐ๋
1. ๋ฐ์ดํฐ์ ์ฐ์์ ์ธ ํ๋ฆ
์คํธ๋ฆผ์ ๋ฐ์ดํฐ๊ฐ ์ฐ์์ ์ผ๋ก ํ๋ฅด๋ ํต๋ก์ ๊ฐ์ผ๋ฉฐ, ์ ๋ ฅ ์คํธ๋ฆผ์ ์ธ๋ถ ์์ค๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ํ๋ก๊ทธ๋จ ๋ด๋ก ์ ๋ฌํ๊ณ , ์ถ๋ ฅ ์คํธ๋ฆผ์ ํ๋ก๊ทธ๋จ์์ ์ธ๋ถ์ ๋ชฉ์ ์ง๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ค.
๐ค ์ ๋ฐ์ดํฐ๋ฅผ ์คํธ๋ฆผ์ผ๋ก ์ ๋ฌํ ๊น? -> ์คํธ๋ฆผ์ ์ฅ์
1. ๋ฉ๋ชจ๋ฆฌ์ ํจ์จ์ฑ
์คํธ๋ฆผ์ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํ์ง ์๊ณ ์์ ๋จ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ฐ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค. ์๋ฅผ ๋ค์ด, ํฐ ํ์ผ์ ํ ๋ฒ์ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฌ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ๋ฌธ์ ๋ฅผ ์ ๋ฐํ ์ ์์ง๋ง, ์คํธ๋ฆผ์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์์ ๋จ์๋ก ์ฒ๋ฆฌํ๋ฉด ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํผํ ์ ์๋ค.
2. ์ถ์ํ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ
์คํธ๋ฆผ์ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ์ ์ถ์ฒ๋ ๋ชฉ์ ์ง์ ๊ด๊ณ์์ด ์ผ๊ด๋ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ํ์ผ, ๋คํธ์ํฌ ์์ผ, ๋ฉ๋ก๋ฆฌ ๋ฑ ๋ค์ผ์ ๋ฐ์ดํฐ ์์ค์ ๋ชฉ์ ์ง์์ ์คํธ๋ฆผ์ ์ฌ์ฉํด ๋์ผํ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ธ ์ ์๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๊ฐ ๋ฐ์ดํฐ ์ ์ก ๋ฐฉ์์ ์ ๊ฒฝ ์ฐ์ง ์๊ณ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋๋ก ์ถ์ํํด์ค๋ค.
3. ๋น๋๊ธฐ ์ฒ๋ฆฌ ๊ฐ๋ฅ์ฑ
์คํธ๋ฆผ์ ๋น๋๊ธฐ์ ์ธ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ์ ํฉํ๋ค. ํนํ ๋คํธ์ํฌ์ ๊ฐ์ ํ๊ฒฝ์์๋ ๋ฐ์ดํฐ๊ฐ ์์ฐจ์ ์ผ๋ก ๋์ฐฉํ ์ ์์ผ๋ฏ๋ก ์คํธ๋ฆผ์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ธ ๋ ๋น๋๊ธฐ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ๋ฉด ์์คํ ์ ์๋ต์ฑ๊ณผ ํจ์จ์ ๋์ผ ์ ์๋ค.
2. ๋จ๋ฐฉํฅ์ฑ
์๋ฐ ์คํธ๋ฆผ์ ์ ๋ ฅ ๋๋ ์ถ๋ ฅ์ ์ด๋ ํ ๋ฐฉํฅ์ผ๋ก๋ง ๋์ํ๋ค. ์ ๋ ฅ ์คํธ๋ฆผ์ ์ฝ๊ธฐ ์ ์ฉ์ด๊ณ , ์ถ๋ ฅ ์คํธ๋ฆผ์ ์ฐ๊ธฐ ์ ์ฉ์ด๋ค.
๐ค ์ ์คํธ๋ฆผ์ ๋จ๋ฐฉํฅ์ผ๋ก ๋ง๋ค์์๊น?
๋จ์์ฑ๊ณผ ์ ์ถ๋ ฅ ์์ ์ ํจ์จ์ ์ธ ์ฒ๋ฆฌ ๋๋ฌธ์ด๋ค.
1. ๋จ์์ฑ Simplicity
- ์คํธ๋ฆผ์ ๋จ๋ฐฉํฅ์ฑ์ ์ ์ถ๋ ฅ ์์ ์ ๋จ์ํํ๋ค. ํ๋์ ์คํธ๋ฆผ์ด ํ ๋ฐฉํฅ์ผ๋ก๋ง ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ธฐ ๋๋ฌธ์ ์ฝ๋ ์์ฑ๊ณผ ์ดํด๊ฐ ๋ ์ฌ์์ง๋ค. ์ ๋ ฅ๊ณผ ์ถ๋ ฅ์ ๋์์ ์ฒ๋ฆฌํด์ผ ํ๋ค๋ฉด, ๋ณ๋ก์ ์คํธ๋ฆผ์ ๊ฐ๊ฐ ๋ง๋ค์ด ๋ ๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ค.
- ๋จ๋ฐฉํฅ ์คํธ๋ฆผ์ ๊ตฌํํ ๋, ์ ์ถ๋ ฅ์ ์ํ์ ๋ฒํผ ๊ด๋ฆฌ๋ฅผ ๋จ์ํ๊ฒ ์ ์งํ ์ ์๊ธฐ ๋๋ฌธ์, ๋ณต์ก์ฑ์ ์ค์ด๊ณ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํ ์ ์๋ค.
2. ํจ์จ์ ์ธ ์์ ๊ด๋ฆฌ Resource Efficiency
- ์คํธ๋ฆผ์ ํ๋์ ๋ฐฉํฅ๊ณผ ๋ฐ์ดํฐ๋ฅผ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๋ฒํผ ๊ด๋ฆฌ์ ๋ฐ์ดํฐ ํ๋ฆ ๊ด๋ฆฌ๊ฐ ํจ์จ์ ์ด๋ค. ์๋ฐฉํฅ ์คํธ๋ฆผ์ ๊ฒฝ์ฐ ๋ฐ์ดํฐ์ ์ฝ๊ธฐ์ ์ฐ๊ธฐ๋ฅผ ๋์์ ๊ด๋ฆฌํด์ผ ํ๋ฏ๋ก ๋ฒํผ๋ฅผ ์ฌ๋ฌ ๊ฐ ๊ด๋ฆฌํ๊ฑฐ๋ ์ํ ์ ํ์ ์ฒ๋ฆฌํด์ผํ๋ ๋ณต์ก์ฑ์ด ์ถ๊ฐ๋๋ค
3. I/O์ ์ ํต์ ์ธ ํน์ฑ
- ๋๋ถ๋ถ์ ์
์ถ๋ ฅ ์ฅ์น๋ ์ ํต์ ์ผ๋ก ๋จ๋ฐฉํฅ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค. ์ด๋ฅผ ๋ฐ์ํด ์ ํต์ ์ธ ์
์ถ๋ ฅ ์์
๊ณผ ์ ๋ง๋๋ก ์ค๊ณ๋์๋ค.
- ํ๋ฆฐํฐ - ์ปดํจํฐ์์ ํ๋ฆฐํฐ๋ก ๋ฐ์ดํฐ๊ฐ ํ๋ฅธ๋ค.
- ๋ง์ดํฌ - ์๋ฆฌ๋ฅผ ์ปดํจํฐ๋ก ์ ๋ ฅํ๋ค.
- ์คํผ์ปค - ์ปดํจํฐ์์ ์ถ๋ ฅ๋ ์ค๋์ค ๋ฐ์ดํฐ๋ฅผ ์๋ฆฌ๋ก ๋ณํํ๋ค.
4. ๋ฐ์ดํฐ ์์ฐจ ์ฒ๋ฆฌ์ ์ฉ์ด์ฑ
- ์คํธ๋ฆผ์ ๋ฐ์ดํฐ๋ฅผ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๋ฐ ์ ํฉํ๋ค.
5. ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์์ ์์ ์ฑ
- ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์ ๋ฐ์ดํฐ ์ถฉ๋์ ์ค์ผ ์ ์๋ค. ์ฝ๊ธฐ ์คํธ๋ฆผ๊ณผ ์ฐ๊ธฐ ์คํธ๋ฆผ์ ๋ ๋ฆฝ์ ์ผ๋ก ์ฌ์ฉํ๋ฉด ์๋ก ๊ฐ์ญํ์ง ์๊ธฐ ๋๋ฌธ์ ์ค๋ ๋ ์์ ์ฑ์ ๋ ์ฝ๊ฒ ํ๋ณดํ ์ ์๋ค.
3. ๋ฐ์ดํฐ ์์ค์ ๋ฐ์ดํฐ ์ฑํฌ์ ์ฐ๊ฒฐ
์คํธ๋ฆผ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ฌ ๋ฐ์ดํฐ ์์ค(ํ์ผ, ๋ฉ๋ชจ๋ฆฌ, ๋คํธ์ํฌ ๋ฑ)์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ๋ฐ์ดํฐ ์ฑํฌ(์ถ๋ ฅ ์ฅ์น, ํ์ผ ๋ฑ)๋ฅผ ์ฐ๊ฒฐํ๋ ์ค๊ฐ ๋งค๊ฐ์ฒด์ด๋ค. ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ด๋ํ๊ณ ์ฒ๋ฆฌํ ์ ์๋ค.
4. ๋ฐ์ดํธ ์คํธ๋ฆผ vs ๋ฌธ์ ์คํธ๋ฆผ
์๋ฐ์์๋ ๋ฐ์ดํธ ์คํธ๋ฆผ(InputStream, OutputStream)๊ณผ ๋ฌธ์ ์คํธ๋ฆผ(Reader, Writer)์ผ๋ก ๋๋ ์ ์๋ค.
๋ฐ์ดํธ ์คํธ๋ฆผ์ ์ด์ง ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉํ๊ณ , ๋ฌธ์ ์คํธ๋ฆผ์ ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ์ ํฉํ๋ค.
5. ์ถ์ํ์ ํํฐ๋ง
์คํธ๋ฆผ์ ๋ฐ์ดํฐ์ ์ธ๋ถ์ ์ธ ์ฝ๊ธฐ/์ฐ๊ธฐ ๊ณผ์ ์ ์ถ์ํํ์ฌ, ํ๋ก๊ทธ๋๋จธ๊ฐ ์คํธ๋ฆผ์ผ ํตํด ๋ฐ์ดํฐ ์ ์ก์ ๋ ์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์๋๋ก ๋๋๋ค.
์๋ฐ์์๋ ํํฐ ์คํธ๋ฆผ(BuggeredInputStream, BuggerdWiter)์ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ๋ฒํผ๋งํ๊ฑฐ๋ ๋ค๋ฅธ ์์ (์ : ์์ถ, ์ํธํ)์ ์ํํ๋ ๋ฐ ๋์์ ์ค๋ค.
์คํธ๋ฆผ์ ๊ตฌ๋ถ
1. ์ ๋ ฅ ์คํธ๋ฆผ Input Stream & ์ถ๋ ฅ ์คํธ๋ฆผ Output Stream
์ ๋ ฅ ์คํธ๋ฆผ Input Stream
- ๋ฐ์ดํฐ ์์ค์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋๋ค
์ถ๋ ฅ ์คํธ๋ฆผ Output Stream
- ๋ฐ์ดํฐ๋ฅผ ๋ชฉ์ ์ง์ ์ด๋ค.
2. ๋ฐ์ดํธ ์คํธ๋ฆผ Byte Stream & ๋ฌธ์ ์คํธ๋ฆผ character Stream
๋ฐ์ดํธ ์คํธ๋ฆผ Byte Stream
- 8๋นํธ ๋ฐ์ดํธ์ ์ ๋ ฅ ๋ฐ ์ถ๋ ฅ์ ๊ตฌํํ๋ค.
- ๋ฐ์ดํธ ์คํธ๋ฆผ์ ์ ๋ ฅ ์คํธ๋ฆผ์ InputStream, ์ถ๋ ฅ ์คํธ๋ฆผ์ OutputStream ํด๋์ค๋ฅผ ์ด์ฉํด ๋ฐ์ดํธ ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
๋ฌธ์ ์คํธ๋ฆผ Character Stream
- 16๋นํธ ์ ๋์ฝ๋์ ์ ๋ ฅ ๋ฐ ์ถ๋ ฅ์ ๊ตฌํํ๋ค.
- ๋ฌธ์ ์คํธ๋ฆผ์ ์ถ์ ํด๋์ค Redaer์ Wiriter๊ฐ ๋ฌธ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
3. ์ฐ๊ฒฐ ์คํธ๋ฆผ Connection Stream & ์ฐ์ ์คํธ๋ฆผ Chain Stream
์ฐ๊ฒฐ ์คํธ๋ฆผ Connection Stream
- ์ค์ ๋ก ๋ฐ์ดํฐ ์์ค(์: ํ์ผ, ๋คํธ์ํฌ ์์ผ ๋ฑ)์ ํ๋ก๊ทธ๋จ ์ฌ์ด๋ฅผ ์ฐ๊ฒฐํด ์ง์ ์ ์ผ๋ก ๋ฐ์ดํฐ ์ ์ก์ ๋ด๋นํ๋ค.
- ์ด ์คํธ๋ฆผ์ ๋ฐ์ดํฐ์ ๋ฌผ๋ฆฌ์ ์ ์ฅ์์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฑฐ๋, ๊ทธ ์ ์ฅ์์ ๋ฐ์ดํฐ๋ฅผ ์ฐ๋ ์ญํ ์ ํ๋ค.
- ์๋ฐ์์ ๋ํ์ ์ธ ์ฐ๊ฒฐ ์คํธ๋ฆผ์ FileInputStream, FileOutputStream, SocketInputStream, SocketOutputStream ๋ฑ์ด ์๋ค.
- ์ด ์คํธ๋ฆฌ๋ค์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํธ ๋จ์๋ก ์ฒ๋ฆฌํ๋ฉฐ, ํ์ผ, ๋คํธ์ํฌ์์ ์ฐ๊ฒฐ์ ํตํด ์ค์ ๋ฐ์ดํฐ์ ์ฝ๊ธฐ/์ฐ๊ธฐ๋ฅผ ์ํํ๋ค.
์ฐ์ ์คํธ๋ฆผ Chain Stream
- ์ฐ์ ์คํธ๋ฆผ, ๋๋ ํํฐ ์คํธ๋ฆผ์ด๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋ ์ด ์คํธ๋ฆผ์ ๋ค๋ฅธ ์คํธ๋ฆผ์ ์ฐ๊ฒฐ๋์ด ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ ์ถ๊ฐ๋ก ์ ๊ณตํ๋ค.
- ์ฐ์ ์คํธ๋ฆผ์ ์ง์ ๋ฐ์ดํฐ ์์ค์ ์ฐ๊ฒฐ๋์ง ์์ง๋ง, ์ฐ๊ฒฐ ์คํธ๋ฆผ ์์ ๊ธฐ๋ฅ์ ๋ง๋ถ์ด๋ ํํ๋ ์๋ํ๋ค.
- ์๋ฅผ ๋ค์ด, ๋ฒํผ๋ง, ์์ถ, ์ธ์ฝ๋ฉ ๋ฑ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํด ์ฑ๋ฅ์ ํฅ์์ํค๊ฑฐ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํ ์ ์๋ค.
- ์๋ฐ์์ BufferedInputStream, BufferedOutputStream, DataInputStream, DataOutputStream, ObjectInputStream, ObjectOutputStream ๋ฑ์ด ์ด์ ํด๋นํ๋ค. ์๋ฅผ ๋ค์ด, BufferedInputStream์ FileInputStream์ ๋ฒํผ๋ง ๊ธฐ๋ฅ์ ์ถ๊ฐํด ์ฑ๋ฅ์ ๊ฐ์ ํ๋ค.
์์ : ์ฐ๊ฒฐ ์คํธ๋ฆผ๊ณผ ์ฐ์ ์คํธ๋ฆผ์ ์กฐํฉ
FileInputStream fileInputStream = new FileInputStream("data.txt"); // ์ฐ๊ฒฐ ์คํธ๋ฆผ
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream); // ์ฐ์ ์คํธ๋ฆผ
์์ ์์์์ FileInputStream์ ์ค์ ํ์ผ๊ณผ ์ฐ๊ฒฐ๋ ์ฐ๊ฒฐ ์คํธ๋ฆผ์ผ๋ก, ํ์ผ์์ ๋ฐ์ดํธ๋ฅผ ์ฝ๋ ์ญํ ์ ํ๋ค. BufferdInputStream์ ์ด FileInputStream์ ์ฐ๊ฒฐ๋ ์ฐ์ ์คํธ๋ฆผ์ผ๋ก, ๋ฐ์ดํฐ๋ฅผ ๋ฒํผ๋งํด ๋ ํจ์จ์ ์ผ๋ก ์ฝ์ ์ ์๋๋ก ๋์์ค๋ค.
๐ค ์ ์ฐ๊ฒฐ ์คํธ๋ฆผ๊ณผ ์ฐ์ ์คํธ๋ฆผ์ ๋๋ด์๊น
๊ฐ์ฒด์งํฅ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก, ํด๋์ค๊ฐ ํ๋์ฉ์ ๊ธฐ๋ฅ๋ง ๋ด๋นํ๊ธฐ ์ํด์์ด๋ค.
๋ค์ํ ์ฐ๊ฒฐ ๋ฐ ์ฐ์ ์คํธ๋ฆผ์ ์กฐํฉํด ์ ์ฐํ ํ๋ก๊ทธ๋๋ฐ์ ํ ์ ์๋ค.
'๋น ๊ตฌ๋ฉ ์ฑ์ฐ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋ฐ] ์ ์ ํ์ ์ง์ ์ธ์ด (1) | 2024.10.09 |
---|---|
[ํ๋ก๊ทธ๋๋ฐ] ์์ญ ํนํ ์ธ์ด, Domain Specific Language (1) | 2024.10.09 |
[Java] ๋ฎคํ ์ค Mutex & ์ธ๋งํฌ์ด Semaphore (0) | 2024.10.01 |
[Java] volatile ํค์๋ - ๋ณ์์ ๊ฐ์์ฑ, ์ฌ์ ๋ ฌ ๋ฐฉ์ง (0) | 2024.10.01 |
[Java] Thread์ stop()๊ณผ interrupt()์ ๋น๊ต (2) | 2024.10.01 |