java/기본 문법

java_기본 문법 - Scanner, InputStream, BufferedReader

정데브 2021. 5. 9. 00:23

 

 

 

안녕하세요! 정데브입니다~~ 

백준 알고리즘 풀이 도중에 처음보는 버퍼?! BufferedReader가 갑자기 뚜둥.... 🙄

코린이라 항상 Scanner만 사용하다가 이게 도대체 뭐지... 하며 찾아보던 도중에 너무 좋은 블로그를 보고 자극을 받아

제가 이해한 선에서 여러분께 설명하고싶어서 이렇게 글을 쓰게 됬습니다!💕

 

 

혹시 Scaaner 사용법에 대해서 모르시는 분들은 👇👇 요거를 보시고 오면 좋을 것 같습니다!

 

Java_기본문법 - 출력,입력

오늘은 Java 기본문법 1편! 출력과 입력에 대한 설명을 준비했습니다!! 지난 시간에 잠시 출력이 잘 실행되는지 봤었는데요!! 더욱 더 자세하게 알아보도록 하죠 👏👏 1. 출력 출력은 줄로 출력하

jeongdev55.tistory.com

 

 

자, 설명을 시작하기에 앞서 스캐너를 잘 쓰고있는데 도대체 왜! 버퍼를 써야하는거야!! 라고 생각 하실 수 있습니다.

저도 공부하기 전에는 그렇게 생각을했죠 ㅎㅎㅎ 근데 찾아보면 찾아볼수록 아~ 그렇구나~ 상황에 맞게 써야하는구나! 딱 느끼게 됬습니다 🤦‍♀️

 

 

자바의 기본적 입출력 클래스는 java.io라는 패키지에 존재하며, 사용시 반드시 예외처리를 해줘야합니다!

스캐너는 이러한 예외처리를 자체적으로 해주고, 정규식을 통한 컴파일로 메소드의 타입에 맞게 형을 반환해줍니다.

그래서 우리가 사용할 당시에는 따로 import만 해주고 입력 당시 in.next() ... nextInt()....타입에 맞게 반환해 준것이죠!

 

 

스캐너를 사용하신 분들이라면 아실겁니다.

Scanner in = new Scanner (System.in);

우리는 이와같이 선언을 하고 import를 통해서 스캐너를 사용하죠! 여기서 ( 요기 )괄호System.in 이 무엇일까? 라고 생각하신 적이 있으신가요? 

 

저도 스캐너를 쓸 당시에는 그냥 아 이렇게 외워서 쓰는구나... 하고 넘어갔었습니다! 

 

버퍼를 사용할때도 등장하죠??

BufferedReader  br =new BufferedReader (new InputStreamReader(System.in));

 

 

BufferedReader에 들어가기에 앞서서 먼저 알아둬야 하는 기본적인 개념부터 집고 넘어가도록 하겠습니다!


 

 

 

 

이해를 돕기위한 사진 첨부

 

 

System.in 그리고 InputStream 관계

자바에서의 기본적인 입력 스트림이 바로 InputStrem입니다! (반대- 출력 OutputStrem)

 

Scanner 생성 시 System.in을 딱 쳤을때에 나오는 화면입니다.

 

 

in 옆에 inputStrem이 보이시나요??

 >> System.in 이 InputStream의 타입 필드라는 것이죠!

 

컴퓨터의 모든 데이터 단위바이트로 통합니다. 그리하여 기본 입출력 스트림인 InputStream도 데이터를 바이트 단위로 읽게됩니다. 즉, InputStream 의 입력 메소드인 read( )가 바이트 단위로 데이터를 받아드리게 되는 것이죠.

여러개의 데이터를 입력하고 싶을때는 바이트 타입의 배열을 선언하고 받아드리는 방법을 씁니다.

 

InputStream으로 데이터를 입력할 경우에 바이트 단위로 데이터를 저장하기 때문에 우리가 쓴 데이터와 출력되는 데이터가 다름을 알 수 있습니다! 

 

여기서 필요한 것이 캐스팅(형변환)입니다. InputStreamReader가 그 역할을 해줍니다.

InputStreamReader는 InputStream가 사용자가 입력한 문자 그대로를 읽지 못하는 경우를 대비하여 바이트 단위 데이터를 문자(character)단위 데이터로 처리할 수 있게 변환을 도와준답니다😆

 

 

 

 

⭐여기서 다시 개념정리!!⭐

  • 우리가 쓰던 Sytem.inInputStrem타입 필드다!
  • InputStrem은 바이트 단위 데이터를 처리한다!
  • InputStrem의 데이터를 그대로 가져오기 위해선 문자(charactar)로 변환 / InputStreamReader를 사용해야한다!

 

 

BufferedReader 그리고 InputStreamReader(System.in) 관계

 

 

BufferedReader  br =new BufferedReader (new InputStreamReader(System.in));

그럼 여기서 BufferedReader는 왜 사용하지? 라는 의문이 들겁니다!

쉽게 말해, BufferedReader는 InputStreamReader을 통해서 처리된 '문자'를 버퍼에 저장하며 마치 문자열처럼 데이터를 보내주는 것이라고 말할 수 있답니다.

 

  • InputStreamReader 를 출력할때 read( )
  • BufferedReader를 출력할때는 readLine( )

이 메소드는 한 줄 전체를(공백 포함) 하여 읽기 때문에 char배열을 하나하나 생성할 필요가 없이 String 으로 리턴하여 바로 사용 할 수 있습니다.

 

 

BufferedReader의 특징 2가지

  1. 버퍼가 있는 스트림이다.
  2. 별다른 정규식을 검사하지 않는다.

이와같은 특징 덕분에 입력 과정에서 Scanner에 비해 성능이 우수하다고 합니다 !

 

 

 

 

여기까지 BufferedReader 대한 개념을 살펴보았는데요! 처음 공부했을때는 이게 뭔소리지...하고 여러번 읽고 이해했답니다 ㅠㅠ 부족한 설명이지만 긴 글 읽어주셔서 감사합니다!!😍