전개발
article thumbnail

Java를 활용해 알고리즘을 풀 때, 콘솔에서 입력 값을 받아와야 합니다.
이때, 자주 사용되는 입력 방법은 2가지 정도가 있습니다.

java.util.Scanner 클래스

import java.util.Scanner; // Scanner 클래스 사용을 위해선 import 해주어야 합니다.

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine(); // 한 줄의 콘솔 입력 값을 읽어온다.
        sc.close(); // 콘솔 입력이 끝나면, 스캐너를 종료시켜주어야 한다.
        System.out.println(input); // 입력 값 출력
    }
}

java.io.BufferedReader 클래스

BufferedReader 클래스의 메소드들은 입/출력 에러 발생시, IOException을 던지도록 정의되어 있기 때문에, throws IOException로 예외 처리를 해주어야 합니다. 아래 예제에서는 main에 추가해주었습니다.

import java.io.BufferedReader; // BufferedReader 클래스 사용을 위해선 import 해주어야 합니다.
import java.io.IOException; // IOException import
import java.io.InputStreamReader; // InputStreamReader import


public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String input = br.readLine(); // 한 줄의 콘솔 입력 값을 읽어온다.
        System.out.println(input); // 입력 값 출력
    }
}

어느 것을 써야 할까?

위 예제에서, Scanner.nextLine()과 BufferedReader.readLine()은 둘 다 콘솔의 입력 값을 String 자료형으로 읽어오는 비슷한 역할을 수행합니다.
대다수의 알고리즘 풀이에서는 속도가 더빠른 BufferedReader를 권장하고 있습니다.

그럼 Scanner는 전혀 쓸 일이 없을까요...?

아닙니다. 만약, 입력 값을 int, double과 같이 다른 자료형으로 읽어오고 싶을 때는 Scanner가 더 효율적일 수도 있습니다.
BufferedReader는 입력 값을 String으로 읽어오기 때문에, 다른 자료형으로 변환 시 별도의 형변환 과정을 거쳐주어야 합니다.
반면, Scanner는 nextInt(), nextDouble()과 같은 메소드를 제공하기 때문에, 입력 자체를 원하는 자료형으로 받아올 수 있습니다.

Scanner의 메소드

  • next() : Token 기준으로 String을 읽어옵니다.
  • nextLine() : Enter 기준으로 String을 읽어옵니다.
  • nextInt() : 다음 토큰을 int로 읽어옵니다.
  • nextBoolean() : 다음 토큰을 Boolean으로 읽어옵니다.
  • nextByte() : 다음 토큰을 Byte로 읽어옵니다.
  • nextShort() : 다음 토큰을 short으로 읽어옵니다.
  • nextLong() : 다음 토큰을 long으로 읽어옵니다.
  • nextFloat() : 다음 토큰을 float로 읽어옵니다.
  • nextDouble() : 다음 토큰을 double로 읽어옵니다.
profile

전개발

@전개발

프론트엔드 개발자, 전인혁(Jeonny) 입니다.
포스팅이 좋았다면 "공감❤️" 과 "댓글👍🏻" 부탁드립니다. 😊