1. IO란?
- Input & Output(입력 & 출력)
- 입력은 키보드, 네트워크, 파일등으로 부터 받을 수 있다.
- 출력은 화면, 네트워크, 파일등에 할 수 있다.
2. Java IO도 객체이다.
- Java IO에서 사용되는 객체는 자바세상에서 사용되는 객체이다.
- Java IO가 제공하는 객체는 어떤 대상으로부터 읽어드려, 어떤 대상에게 쓰는 일을 한다.
3. Java IO는 조립되어 사용되도록 만들어졌다.
- Decorator 패턴으로 만들어 졌다. -> 장식할 대상이 있다. -> 주인공(대상) + 장식 + 장식....
- ConcreteComponent와 Decorator는 Component를 상속 받는다.
- 녹색 마름모 연결선은 Decorator가 component를 가질수 있다는 것을 의미한다. -> component를 가질 수 있다는 것은 Component를 상속받는 것들도 가질 수 있다.
4. 주인공과 장식을 구분할 수 있어야 한다.
- InputStream, OutputStream, Reader, Writer 4가지는 Component 역할을 수행하며, 추상클래스이다.(new를 통해 인스턴스 생성 불가)
- 주인공은 InputStream, OutputStream, Reader, Write를 상속받은 것중에 있다.(Decorator도 마찬가지)
- Decorator는 component를 가질 수 있다. -> 필드로 가지고 있다. -> 생성자에 넣어주어야 한다.
- 따라서 주인공과 Decorator를 구분하는 방법은 Decorator는 생성자에 component를 받도록 되어있다.
- 장식은 InputStream, OutputStream, Reader, Writer를 생성자에서 받아들인다.
- 주인공은 어떤 대상에게서 읽어들일지, 쓸지를 결정한다.
- 주인공은 1byte 또는 byte[] 단위로 읽고 쓰는 메소드를 가진다.
- 주인공은 1char 또는 char[] 단위로 읽고 쓰는 메소드를 가진다.
- 장식은 다양한 방법으로 읽고 쓰는 메소드를 가진다.
5. JavaIO의 특수한 객체
- System.In: 표준 입력(InputStream)
- System.out: 표준 출력(OutputStream)
- System.err: 표준 에러 출력(OutputStream)
6. JavaIO class 상속도
https://docs.oracle.com/javase/8/docs/api/java/io/package-summary.html
java.io (Java Platform SE 8 )
Writes text to a character-output stream, buffering characters so as to provide for the efficient writing of single characters, arrays, and strings.
docs.oracle.com
여기서 각 클래스에 들어가 주인공과 Decorator를 구분해보자.
문제
키보드로부터 한줄 씩 입력받아 화면에 한줄씩 출력하시오.
더보기
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class KeyboardIOExam {
public static void main(String[] args) throws Exception{ //Exception을 JVM에게 떠넘긴다(좋진 않음)
//키보드로부터 한줄 씩 입력받아 화면에 한줄씩 화면에 출력하시오.
//키보드 입력: System.in (InputStream 주인공)
//화면에 출력: System.out (PrintStream 주인공)
//키보드로 입력받는건 문자로 입력받는것 -> char 단위 입출력
//char 단위 입출력 -> Reader, Writer
//한줄 읽기: BufferedReader라는 클래는 readLine이라는 메소드를 가지고 있다.
// 더이상 읽어들일 것이 없으면(End Of File ->EOF) null을 반
// BufferedReader는 장식이다.(주인공이 없으면 사용 불가)
//한출 쓰기: PrintStream, PrintWriter
//BufferedReader x
//CharReader x - 문자로부터 읽어드린다.
//FilterReader x - 장식, Reader를 넣어줘야 한다.
//InputStreamReader(InputStream in) - 장식이지만 우리의 주인공인 키보드입력 System.in을 받아들일 수 있다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = null;
while ((line = br.readLine()) != null) {
System.out.println("읽어들인 값: " + line);
}
//맥에서는 command+d 는 EOF값을 입력하는 키
}
}
'Java > 기초' 카테고리의 다른 글
[Java] JavaIO - (4) Object IO Stream(+깊은복사, 얕은복사) (0) | 2023.10.27 |
---|---|
[Java] JavaIO - (3)Data, ByteArray, StringReaderWriter (0) | 2023.10.27 |
[Java]JavaIO - (2)FileIOStream (0) | 2023.10.25 |
[Java] 상속 - 필드, 메서드 오버라이딩할 때 주의점 (0) | 2023.10.23 |
[Java]자바 프로그램의 실행 과정 (0) | 2023.10.21 |