기본 콘텐츠로 건너뛰기

0.21 I / O (Input / Output)

I / O (Input / Output)


0. 개요
1. 바이트 기반 입출력 스트림
2. 문자열 기반 입출력 스트림
3. VO(Value Object)



0. 개요
1) IO
 - 외부와 데이터를 주고 받기를 추상화, 캡슐화한 패키지
 - IO block: 입력을 기다림
 - 단방향 모델
 - FIFO(First In First Out)
 - 유연한 구조: 다형성 / 묵시적인 형변환


1. 바이트 기반(xxxStream) 입출력 스트림

<바이트 기반 i/o 개요>

 ※ sink stream: 데이터를 직접 주고 받는 단순 입출력 스트림
    filter stream: sink stream을 통해 들어온 데이터를 조작하는 스트림
     예) inputStreamReader / bufferedReader 등



2. 문자열 기반(Reader / Writer) 입출력 스트림: 영어권 외 국가의 언어



<문자열 기반 i/o 개요 및 Reader 계열 계층 구조>


 ※ PrintWriter(OutputStream out, boolean autoflush)
  - flush(): 스트림에 남은 데이터를 강제롤 내보내는 역할
  - close(): 원래는 finally에 들어가야 autoflush기능이 있다 / reader, writer와 연결 끊기

 ※ EOF(End Of File): read()가 파일에서 글자를 한 개 씩 읽음
                          더이상 읽을 내용이 없다면 -1 리턴


3. VO객체(Value Object)
 - 정보 저장하고 있는 객체
 - 내부에 필드, getter, setter method 뿐
 - 객체를 입출력, 네트워크 자원으로 이동하기 위해서는 Serializable(marker interface)를 구현해야 함

 ※ Serializable: 인터페이스지만 구현해야하는 메서드는 없음
                   언젠가 외부로 나간다는 의미를 갖는 marker interface(객체 직렬화)


 ※ nullString: 출력시 공백
    null: 아무것도 아님 / 사칙연산은 가능 / 그렇지만 사칙연산을 해도 결과는 null