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로 읽어옵니다.
'Java' 카테고리의 다른 글
[Java] String.format();으로 출력 서식 지정하기 (0) | 2023.01.18 |
---|---|
[Java] 문자열 클래스 - String과 StringBuilder (0) | 2023.01.11 |
[Java] System.gc();와 Garbage Collection (0) | 2023.01.09 |
[Java] print 메소드와 BufferedWriter로 콘솔에 출력하기 (0) | 2023.01.09 |