자바 입출력, I/O(Input/Output)

준우·2022년 4월 27일
0

Java

목록 보기
11/30
post-thumbnail

IO가 뭔데?!

자바 IO 패키지의 I는 Input, O는 Output을 의미한다.
프로그램 동작 시 들어오는 모든 값을 Input Data 라고 하며
파일, 네트워크, 콘솔 등 밖으로 나가는 모든 값을 Output Data라고 한다.
결론은 IO는 입력과 출력에 대한 인터페이스드와 클래스들이다.

IO 종류

io는 크게 byte와 char(문자) 단위 입출력으로 나뉜다.
두 개의 입출력 클래스는 모두 추상 클래스를 상속받아 만들어지는데
그 종류는 각기 아래와 같다.

byte 단위 입출력 클래스가 상속받는 클래스

  • InputStream
  • OutputStream

char 단위 입출력 클래스가 상속받는 클래스

  • Reader
  • Writer
  • InputStream
  • OutputStream
  • Reader
  • Writer

위 4가지의 추상 클래스를 받아들이는 생성자가 있다면

  • 다양한 입출력을 제공하는 클래스

위 4가지의 추상 클래스를 받아들이는 생성자가 없다면

  • 어디로 부터 입력받을 것인지, 어디에 쓸 것인지를 나타내는 클래스.
  • 1 바이트 혹은 1 캐릭터 단위로 입력하거나, 바이트 배열 또는 캐릭터 배열 단위로 입출력한다.

입력하고 출력하는 메소드는 기능이 단순하게 제공되기 때문에
좀 더 특별한 방법으로 입력과 출력을 하고 싶다면
위 추상 메서드 4개를 받아들이는 io 클래스를 이용해야 한다.

그것은 바로! 아래 장식 대상 클래스라고 불리는 것들이다.

"파일" 입력/쓰기 클래스

  • FileInputStream
  • FileOutputStream
  • FileReader
  • FileWriter

"배열" 입력/쓰기 클래스

  • ByteArrayInputStream
  • ByteArrayOutputStream
  • CharReader
  • CharWriter

위 IO 클래스들은 "어디로부터 입력 받을 것인지, 어디에 쓸 것인지"라는
대상을 지정할 수 있다.

장식대상 클래스

특히 DataInputStream, DataOutputStream 같은 클래스는
다양한 데이터 형을 입력받고 출력하는데,

PrintWriter는 한줄을 출력하는 pintln()메소드를 가지고 있으며,
BufferedReader는 한줄 입력받는 readLine()메소드를 가지고 있다.

이렇게 다양한 방식으로 입력하고, 출력하는 기능을 제공 하는 클래스를
"장식하는 것처럼 생성자에 감싸서 새로운 기능을 계속 추가할 수 있도록 한다."
고 해서 장식대상 클래스라고 부른다.

디자인 패턴

데코레이터 패턴

자바 IO는 자바 디자인 패턴 중에서 데코레이터 패턴으로 만들어졌다.
위에서 설명한 것처럼 하나의 클래스를 장식하는 것처럼 생성자에 감싸서
새로운 기능을 계속 추가할 수 있도록 클래스를 만드는 방식이다.
디자인 패턴에 대한 내용은 다른 포스팅에서 자세히 정리해봐야겠다.

🙏 Reference

0개의 댓글