It's Ward

JAVA String 입력 - BufferedReder 본문

Java/Java 기본

JAVA String 입력 - BufferedReder

I'm ward 2022. 5. 26. 01:48

JAVA에서 대표적으로 입력 받을 수 있는 클래스는 BufferedReader Scanner이다. 

스캐너는  다음 게시물에서 확인 할 수 있다.2022.05.26 - [Java/Java 개념과 이론] - JAVA String 입력 - Scanner

들어가기 앞서.. 동일하게

Scanner와 BufferedReader를 사용할 때에는 해당 클래스를 호출해야 한다.

 자바에서 사용하는 대부분 클래스는 import를 통해 호출해야한다. 물론 대부분 자바 개발 IDE(Intellij , Eclipse)는 당연하듯이 자동으로 import를 해주거나 간단하게 처리할 수 있지만 다른 환경(웹으로 진행하는 코딩 테스트 환경 - 대표적으로 프로그래머스, 기업 코딩 테스트 등)에서는 수동으로 import를 해야할 때가 있다.

System.in

자바의 표준 입력 스트림으로, 키보드에서 입력받을 때, 사용.

독립적으로도 사용은 가능하나, 바이트 -> 문자나 숫자 변경이 조금 까다롭고, Enter도 함께 입력받아 처리하는 부분을 따로 구현해한다.

 

버퍼리더 (BufferedReder)

 

스캐너는 제공하는 메소드를 이용해 기본형을 입력받을 수 있고  Space, Enter를 구분자로 인식해 입력받은 데이터를 가공하기에 편리하다.

이와 다르게 버퍼리더는 Enter만 구분자로 인식하고 String으로만 데이터가 고정되기때문에 추가로 가공해야하는 작업이 필요하다.

왜 더 힘든 작업을 하는데 Scanner를 사용하지않고, 버퍼리더는 있는것일까? 바로 데이터를 처리하는 속도가 빠르기때문이다. 해당 게시물은 사용 방법에 대해 이야기하고,  속도적인 측면은 다음 게시물에서 설명하도록 한다.

 

1. import 

BufferedReader 클래스를 사용하기 위해서는 반드시 호출해 주어야 한다.

Scanner와 다르게 io(inuput ouput) 라이브러리 에서 호출하며 BufferedReader , InputStreamReader 클래스 경로를 호출해야한다.

import java.io.BufferedReader;
import java.io.InputStreamReader;

둘 다 동일하게 java.io 의 라이브러리 이므로 아래와 같이도 import가 가능하다.

import java.io.*;

 

2. BufferedReader 객체 생성 예시

스캐너 클래스를 사용하기 위해 import를 진행하였다면 

아래와 같이 BufferedReader 객체를 생성하여, 사용할 수 있다. 다만, scanner와 다르게 InputStreamReader를 통해 System.in 을 사용한다.

단순하게 InputStreamReader가  문자 하나 를 입력받으면 BufferedReader가 여려개의 문자를 직렬화 하여 문자열로 저장하는 형식이다.

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

 

3. BufferedReader 메소드

BufferedReader 의 입력메소드는 다음과 같다. 해당 메소드를 불러오면, Consol창에서 Enter전까지 한번 입력 받을 수 있다.

기본적으로 입력받은 주석에 해당하는 타입으로 반환한다.

bufferedReader.readLine() // 한 줄을  읽어 String으로 반환
bufferedReader.read() // 한 글자만 읽어 아스키코드로 반환('1' -> 49(아스키코드))

 

4. BufferedReader 주의사항

1. 잘못된 타입을 입력 받을 경우를 대비해 throws IOException을 사용하거나 try & catch를 활용해 예외처리를 해야한다.

2. 문자열이 아닌 숫자로 변경할 경우 Integer.parseInt() 등 형변환을 진행하여야 한다.

int num = Integer.parseInt(bufferedReader.readLine());

 

3. 입력을 더이상 받을 필요가 없으면 close를 통해 인스턴스화를 종료시키자.

bufferedReader.close();
Comments