๊ณ„๋ž€์†Œ๋…„ 2023. 8. 24. 23:56

IO๋ž€? Input & Output

Java IO๋„ ๊ฐ์ฒด์ด๋‹ค.

Decorator ํŒจํ„ด์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ๋‹ค.

ConcreteComponent - ์ฃผ์ธ๊ณต 

Decorator - ์žฅ์‹ , component์—ญํ• ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

์ฃผ์ธ๊ณต๊ณผ ์žฅ์‹์„ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

InputStream, OutputStream, Reader, Writer: ์ถ”์ƒํด๋ž˜์Šค์—ฌ์„œ new๋กœ ๊ฐ์ฒด ์ƒ์„ฑ ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉฐ, Component์— ํ•ด๋‹น

์ฃผ์ธ๊ณต์€ ์–ด๋–ค ๋Œ€์ƒ์—๊ฒŒ์„œ ์ฝ์–ด๋“ค์ผ์ง€, ์“ธ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๊ณ , 1byte or byte[] , 1char or char[]๋‹จ์œ„๋กœ ์ฝ๊ณ  ์“ฐ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์ง„๋‹ค.

์žฅ์‹์€ InputStream, OutputStream, Reader, Write๋ฅผ ์ƒ์„ฑ์ž์—์„œ ๋ฐ›์•„๋“ค์ด๊ณ  ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ์ฝ๊ณ  ์“ฐ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์ง„๋‹ค.

 

Java IO์˜ ํŠน์ˆ˜ํ•œ ๊ฐ์ฒด

System.in: ํ‘œ์ค€์ž…๋ ฅ

System.out: ํ‘œ์ค€ ์ถœ๋ ฅ

Sysstem.err: ํ‘œ์ค€ ์—๋Ÿฌ ์ถœ๋ ฅ

 

Java IO์˜ ํด๋ž˜์Šค ์ƒ์†๋„

Stream์œผ๋กœ ๋๋‚˜๋Š” ํด๋ž˜์Šค byte ๋‹จ์œ„ ์ž…์ถœ๋ ฅ ํด๋ž˜์Šค
InputStream์œผ๋กœ ๋๋‚˜๋Š” ํด๋ž˜์Šค byte ๋‹จ์œ„๋กœ ์ž…๋ ฅ ๋ฐ›๋Š” ํด๋ž˜์Šค
OutputStream์œผ๋กœ ๋๋‚˜๋Š” ํด๋ž˜์Šค byte ๋‹จ์œ„๋กœ ์ถœ๋ ฅ ํ•˜๋Š” ํด๋ž˜์Šค
Reader ๋๋‚˜๋Š” ํด๋ž˜์Šค ๋ฌธ์ž ๋‹จ์œ„๋กœ ์ž…๋ ฅ ๋ฐ›๋Š” ํด๋ž˜์Šค
Writer ๋๋‚˜๋Š” ํด๋ž˜์Šค ๋ฌธ์ž ๋‹จ์œ„๋กœ ์ถœ๋ ฅ ํ•˜๋Š” ํด๋ž˜์Šค
File๋กœ ์‹œ์ž‘ํ•  ๊ฒฝ์šฐ File๋กœ๋ถ€ํ„ฐ ์ž…๋ ฅ์ด๋‚˜ ์ถœ๋ ฅ์„ ํ•˜๋Š” ํด๋ž˜์Šค
ByteArray๋กœ ์‹œ์ž‘ํ•  ๊ฒฝ์šฐ ์ž…๋ ฅ ํด๋ž˜์Šค์˜ ๊ฒฝ์šฐ byte ๋ฐฐ์—ด๋กœ๋ถ€ํ„ฐ ์ฝ์–ด๋“ค์ด๊ณ ,
์ถœ๋ ฅ ํด๋ž˜์Šค์˜ ๊ฒฝ์šฐ ํด๋ž˜์Šค ๋‚ด๋ถ€์˜ ์ž๋ฃŒ๊ตฌ์กฐ์— ์ถœ๋ ฅ ํ•œ ํ›„
์ถœ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ byte ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„๋‹ค.


Java IO ํด๋ž˜์Šค๋Š” ์ƒ์„ฑ์ž๊ฐ€ ์ค‘์š”ํ•˜๋‹ค. 


InputStream, OutputStream, Reader, Writer๋ฅผ ์ƒ์† ๋ฐ›์œผ๋ฉด ์ž๋ฐ” IO ๊ฐ์ฒด(์ฃผ์ธ๊ณต or ์žฅ์‹) ์ด๊ณ , ์•„๋‹ˆ๋ฉด ์ฝ๊ณ  ์“ฐ๋Š” ํด๋ž˜์Šค๊ฐ€ ์•„๋‹ˆ๋‹ค.

์ƒ์„ฑ์ž์— InputStream, OutputStream, Reader, Writer๋ฅผ ๋ฐ›์œผ๋ฉด ์žฅ์‹, ์•„๋‹ˆ๋ฉด ์ฃผ์ธ๊ณต

 

Java IO๋ฅผ ์ž˜ ๋‹ค๋ฃจ๋ ค๋ฉด, API๋ฅผ ์ž˜ ์ฝ์–ด๋ด์•ผ ํ•œ๋‹ค. 

 

ํ‚ค๋ณด๋“œ๋กœ ํ•œ์ค„์”ฉ ์ž…๋ ฅ๋ฐ›์•„์„œ ์ถœ๋ ฅํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด์ž

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.Reader;

public class KeyboardIOExam {
    public static void main(String[] args) throws Exception{
        //ํ‚ค๋ณด๋“œ๋กœ๋ถ€ํ„ฐ ํ•œ์ค„์”ฉ ์ž…๋ ฅ๋ฐ›๊ณ , ํ•œ์ค„์”ฉ ํ™”๋ฉด์— ์ถœ๋ ฅ
        // ํ‚ค๋ณด๋“œ: System.in (InputStream ์ฃผ์ธ๊ณต)
        //ํ™”๋ฉด์— ์ถœ๋ ฅ: System.out (PrintStream ์ฃผ์ธ๊ณต)
        //ํ‚ค๋ณด๋“œ๋กœ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค๋Š”๊ฒƒ = ๋ฌธ์ž๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š” ๊ฒƒ: char ๋‹จ์œ„ ์ž…์ถœ๋ ฅ
        //char ๋‹จ์œ„ ์ž…์ถœ๋ ฅ ํด๋ž˜์Šค๋Š” Reader, Writer
        //ํ•œ์ค„ ์ฝ๊ธฐ: BufferReader๋ผ๋Š” ํด๋ž˜์Šค๋Š” readLine ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์ง„๋‹ค.
        //          ๋”์ด์ƒ ์ฝ์–ด๋“ค์ผ๊ฒƒ์ด ์—†์œผ๋ฉด(EOF) null์„ ๋ฐ˜ํ™˜
        //          ์žฅ์‹!
        //ํ•œ์ค„ ์“ฐ๊ธฐ: PrintStream, PrintWriter

        //BufferedReader ์ƒ์„ฑ์ž์— ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์ƒ๊ฐํ•ด๋ณด์ž
        //BufferedReader x
        //CharReader x - ๋ฌธ์ž๋กœ๋ถ€ํ„ฐ ์ฝ์–ด๋“ค์ธ๋‹ค.
        //FilterReader x - ์žฅ์‹. Reader๋ฅผ ๋˜ ๋„ฃ์–ด์ค˜์•ผ ํ•œ๋‹ค.
        //InputStreamReader(InputStream in) - ์žฅ์‹
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String line = null;
        while((line = br.readLine()) != null) {//ํ•œ์ค„ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. ์ข…๋ฃŒ command D
            System.out.println("์ฝ์–ด๋“ค์ธ๊ฐ’:"+line);
        }
    }
}