[JAVA] Stream 이란?

limchard·2024년 1월 9일
0

java

목록 보기
45/48
post-thumbnail

스트림(Stream) 이란?

일단 스트림(Stream) 에 대해 간단히 알아보자.

참고자료를 찾다보니 점프투자바에서는 아래와 같이 설명한다.

출처 : 점프 투 자바

저걸 봤을때.. 수도꼭지는 이해가 갔는데 아래 3가지 항목은 이해가 안간다..

다른 사람들의 블로그를 찾아보니 간단하게 말해서 스트림은 파일을 읽거나 쓸 때, 데이터가 전송되는 통로라고 생각하면 좋을 것 같다.

아래 그림을 참고해보자.

출발지와 도착지를 이어주는 빨대

위 그림에서 보듯이 한 곳에서 다른 곳으로의 데이터 흐름을 스트림이라고 한다.
그리고 스트림은 단방향이기 때문에 입력과 출력이 동시에 발생할 수 없다. 그렇기 때문에 용도에 따라 입력스트림, 출력스트림이 나뉜다.
(물론 꼭 입력장치나 출력장치가 하드웨어일 필요는 없다. 다만, 이해를 돕기 위해 가장 보편적인 흐름을 보여준 것이다.)

또 다른 비유를 하자면 고속도로라고 보면 된다. 고속도로에서 역주행을 할 수 없듯 스트림은 단방향으로만 흐르며 고속도로에서는 중앙분리대 혹은 도로 자체가 분리되어 상향행 하향행이 존재하듯이 입력스트림과 출력스트림 또한 분리되어 있다고 보면 된다.

그리고 자바에서 가장 기본이 되는 입력 스트림은 InputStream 이다.
(반대로 출력 스트림은 OutputStream 이다.)


필자가 Stream에 대해 관심을 가지게 된 이유는 BufferedReader 때문이다.
그래서 도대체 BufferedReader와 무슨 연관이 있는건데?

이에 대한 대답은 System.inInputStream 타입의 필드라는 것이다.!

더 정확히 보면 System 클래스의 in 이라는 필드는 InputStream의 정적 필드라는 것이다.
아래 사진을 보면 알 수 있다.

(참고로 System 클래스 in 변수는 '표준 입력 스트림'이며 일반적으로 콘소르 명령줄 인수 등을 통해 입력을 받을 수 있다. 매우 간략하게 말하자면 여러분이 키보드로 치거나 터미널에서 입력을 넣어주는 것들은 System.in을 통해 연결된다는 의미다.)

정리하자면 in 이라는 변수는 InputStream의 변수로 결국 InputStream 타입의 새 변수를 선언하고 그 변수에 System.in 을 할당시킬 수도 있다는 뜻이다.
이렇기 때문에 System.in과 InputStream을 같이 묶어서 설명하게 되는 것이다.

그럼 저 것만으로도 입력이 가능할까? 물론 가능하다.

위와 같이 InputStream 타입의 변수를 생성하고 입력을 받는 메소드인 read() 를 통해 입력할 수 있다.

주의할 점!

기본적으로 입출력 클래스는 java.io 라는 패키지에 있다. 이 패키지는 반드시 예외처리를 해줘야 한다.
try-catch 문으로 예외처리를 해주어도 되고 위처럼 메소드에 throws IOExecption 으로 처리해줘도 된다.
Scanner 나 System.out.print 메소드의 경우 해당 메소드 안에서 자체적으로 예외처리를 하기 때문에 예외처리를 해줄 필요가 없지만 기본적으로 io 패키치는 IOException 이라는 예외를 던지기 때문에 이를 처리해주어야 정상적으로 컴파일된다.


느낀점

  • 하면 할 수록 어렵다.. 뭘 알아야 할게 이리도 많은지.. 일단 머리에 때려박다보면 언젠간 정리가 되어서 다 이해하는 날이 오겠지? ㅠㅠ

참고 블로그
https://st-lab.tistory.com/41

profile
java를 잡아...... 하... 이게 맞나...

0개의 댓글