데블 아니고 데블리

운동,햄버거, 개발 좋아요

🐷💻📝

프로그래밍/자바

[JAVA] Scanner vs BufferedReader(),(BufferedWriter) 코딩테스트 무엇을 쓰는게 좋을까 (1)?

데블아니고데블리 2024. 3. 27. 19:51

[서론]

나는 이제서야 백준을 시작했다.. 처음에 입력값 받는 방법을 몰라 검색했었는데, 

Scanner, BufferedReader, BufferedWriter, StringBuilder, StringTokenizer가 눈에 띄는 문법이다. 비슷한 기능을 하지만 왜 코딩테스트에는 BufferedReader를 권장하는 것일까 ? 이번 게시물에서는 기본적인 문법에 대해 설명할 예정입니다

 

[본론]

1. Scanner

[요약]

java.util 패키지에 들어있다.

띄어쓰기, 개행문자("\n")를 기준으로 값을 인식해 편합니다.

정수, 소수, 문자 데이터도 읽을 수 있고

별도의 예외 처리를 명시하지 않아도 됩니다.

⭐️핵심! 데이터를 입력 받을 때 바로 사용자에게 전송된다 ➡️ 한 문자(공백 or 엔터) 칠 때 마다 전송되어야 한다 ➡️ 시간이 걸린다.

 

[사용방법]

해당 클래스 import 해서 사용 (java.util.Scanner;)

package src.com.company.day1;

import java.util.Scanner; // Scanner 클래스 임포트

public class ScannerExample {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in); // System.in으로부터 입력을 받을 Scanner 객체 생성

        System.out.print("이름을 입력하세요: ");
        String name = scanner.nextLine(); // 사용자로부터 한 줄의 문자열 입력 받기

        System.out.print("나이를 입력하세요: ");
        int age = scanner.nextInt(); // 사용자로부터 정수 입력 받기

        // 입력 받은 데이터 출력
        System.out.println("당신의 이름은 " + name + "이고, 나이는 " + age + "살입니다.");

        scanner.close(); // Scanner 객체 닫기
    }
}

 

이 코드를 실행시켜 보면 콘솔 창에 이렇게 뜹니다,

이름을 입력 후 엔터를 누르면

위에 사진처럼 뜹니다. 나이 입력 후 엔터를 누르면

 

엄청 기본적인 것이지만 몰랐던 시절도 있었기에.. 정리 차 적어봅니다.


2. BufferedReader()

[요약]

java.io 패키지에 들어있습니다아.. 데이터를 String형식으로만 읽고 가지고 옵니다.

그리고 초큼 귀찮았던 예외처리!

Checked Exception으로 반드시 예외 처리를 명시해야한다.(I/O Exception을 throw하거나 try/catch 해야한다.)

 

'버퍼'라는 특정한 저장공간이 있는데 데이터를 한번에 읽어 와 버퍼에 보관한 후 데이터를 읽어오는 방식으로 동작하는 클래스 입니다.

➡️ 사용자가 입력한 문자 스트림을 읽는다(문자 데이터를 입출력하기 위한 스트림)

 

⭐️ (핵심) 그래서 버퍼가 가득 차거나 개행 문자가 나타나면 한번에 전송한다 (시간 절약) 

😮‍💨 궁금했던 점은 단일문자에 대한 처리이다. ? 추후 포스팅을 해 보도록 하겠음

 

[사용방법]

 

해당 패키치 import 해서 사용 

readLine();메서드 사용 시 Exception 처리 필요

 

package src.com.company.day1;

import java.io.*;

public class BufferedReaderExample {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        //BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        System.out.print("이름을 입력하세요: ");
        String name = br.readLine(); // 문자열 입력받기

        System.out.print("나이를 입력하세요: ");
        int age = Integer.parseInt(br.readLine()); // 나이 입력(string)받고 Integer로 감싸주

        //받은 데이터 출력
        System.out.println("당신의 이름은 " + name + "이고, 나이는 " + age + "살입니다.");

        br.close();
    }
}

 

이 코드를 실행시켜 보면 콘솔창에 이렇게 뜹니다.

이름을 입력 후 엔터를 누르면

나이 입력 후 엔터를 누르면

 

이것만 보면 Scanner와 차이가 없을 것 같은데...

 

뭐가 어떻게 다르길래 실행시간이 차이가 날까 ? 

2편에 계속 작성하도록 하겠다

 

[티저]

Scanner를 썼을 때 걸린 시간

BufferedReader()를 썼을 때 걸린 시간