관리 메뉴

A seeker after truth

[java] java.io(작성중) 본문

Programming Language/개념

[java] java.io(작성중)

dr.meteor 2020. 8. 5. 17:55

* <프로그래머스 자바 중급> 강의 필기

 

java.io는 크게 바이트와 문자 단위 입출력으로 나뉨.

바이트 단위 입?출력 클래스는 모두 InputStream, OutputStream 이란 추상 클래스를 상속받아 만들어지고

문자 단위 입출력 클래스는 모두 Reader, Writer란 추상 클래스를 상속 받아 만들어진다.

 

어디로부터 입력을 받을 것인지 / 쓸 것인지를 나타내는 클래스는 1byte/char 단위 입력하거나 바이트/캐릭터 배열 단위로 입출력을 하게 된다.

파일 입출력에는 FileInputStream, FileOutputStream, FileReader, FileWriter 클래스가 있고,

배열로부터 입력을 받기 위한 클래스는 ByteArrayInputStream, ByteArrayOutputStream, CharReader, CharWriter.

해당 클래스들은 어디로부터 어디에라고 대상을 지정할 수 있는 io 클래스들이다. 이런 클래스들을 "장식 대상 클래스"라고 한다.

=> 수도꼭지로 치면 거기서 물이 나오는데 어디로부터 받아낼거냐 정도.

 

InputStream, DataOutputStream 클래스를 보면 다양한 데이터형으로 입력을 받고 출력을 한다. (생성자가 다양하단 것인지, 제네릭을 썼다는 말인지...)

printWriter 클래스의 경우 다양하게 한 줄을 출력하는 프린트 메서드인 println을 갖고 있..

BufferReader는 한 줄을 입력받는 readline이란 메서드를 갖고 있고,   PrintWriter...는 언급 안함

이 4개 클래스같이 다양한 방식으로 입출력 기능을 제공하는 걸 "장식하는 클래스"라 한다.

=> 샤워꼭지를 뭘 끼우느냐에 따라 물줄기 모양이나 세기 등이 엄청 다른데 이 샤워꼭지같은 역할.

 

즉, 대상으로부터 무조건 받아내거나 읽어내거나 할 수 있는 클래스들이 존재하고,

이것들을 받을 떄 좀더 편한 방식, 기능만 제공해주는 클래스들이 있다.

 

 

이렇게 장식 이야기를 한건, 자바 io 가 데코레이터 패턴으로 만들어져있기 때문이다.

데코레이터 패턴은 하나의 클래스를 장식하는 것처럼 생성자에서 감싸서 새로운 기능을 계속 추가할 수 있도록 클래스를 만드는 방식을 말한다.

이는 하나의 클래스를 장식하듯 생성자에서 감싸서 새로운 기능을 계속 추가해나갈 수 있도록 클래스를 만드는 방법.

io는 클래스 하나가 그냥 생성되서 사용하는게 아니라 수도꼭지에다가 껍질 하나 끼우고, 연수기 끼우고 이런 식으로 여러 개 클래스를 생성했는데 그 안에 생성자 안에다가 또 넣고 또 넣고... 식으로 사용하는 경우들이 많다

 

 

 

[바이트 단위 입출력]

FileInputStream 안의 read 메서드는 한 바이트씩 읽. 리턴 타입은 정수.

(아마 코드상의 리드 데이터란 변수 이야기같은데... )정수의 4바이트 중 마지막 바이트에서 다 읽어들인 한 바이트를 저장한다.

바이트로 나타내면 끝을 나타내는 값을 표현할 수가 없기 때문에 바이트가 아닌 정수값을 리턴하게 되는 것이다.

 

while((readData=fis.read()) != -1) 부분은 뭐냐, fis가 한 바이트 읽어들였을 때, 파일의 끝이면 -1값을 갖는다 함. 그래서 파일 끝에 도달했느냐 그 의미임.

 

 

 

 

 

 

 

[8/6 개발하면서 써먹어본거 적기]

BufferedReader, BufferedWriter는 버퍼를 이용해 입출력의 효율을 높이는 역할. 버퍼를 이용하면 입출력 효율이 비교할 수 없을 만큼 좋아진다. 그리고 난 그 실제 코드나 원리가 매우 궁금하다... 유튜브 검색해서 찾아봄.

 

 

 

 

 

 

 

'Programming Language > 개념' 카테고리의 다른 글

[java] java thread 쓰레드(작성중)  (0) 2020.08.06
[java] this를 되새겨보자  (0) 2020.07.19
Object의 정체, Map, 미뤄둔 글  (0) 2020.03.14
static vs non-static  (0) 2020.03.14