어느 날, 자바라는 언어를 배우고 코딩 테스트를 준비하는 친구들이 모여 이야기를 나누고 있었어요. 그중 한 친구가 말했어요. "나는 입력을 받을 때마다 프로그램이 느려지는 것 같아!" 다른 친구가 물었어요. "어떤 방법으로 입력을 받고 있어?" 그러자 그 친구는 "나는 항상 Scanner를 써! 쉬워서 좋아!"라고 대답했어요.
그 말을 들은 다른 친구는 이렇게 조언했어요. "사실 BufferedReader라는 방법이 더 빠르다고 해. 우리 한 번 비교해볼래?"
그래서 그 친구들은 각자 Scanner와 BufferedReader를 사용해 프로그램을 만들어보고, 어떤 방법이 더 빠른지 알아보기로 했어요. 그 결과, 정말로 BufferedReader가 더 빠르다는 걸 알게 되었답니다! 그 이유는 무엇일까요? 같이 알아보자구요!
Scanner는 마치 입을 크게 벌리고 한 번에 작은 조각씩 음식을 먹는 것과 비슷해요. 예를 들어, 밥을 한 숟가락씩 떠먹는 것처럼, Scanner는 데이터를 하나씩, 아주 작은 단위로 가져와요.
Scanner sc = new Scanner(System.in);
int number = sc.nextInt();
이렇게 데이터를 하나씩 가져와서 숫자로 바꾸거나 문자열로 바꿀 수 있어요. 편리하긴 하지만, 속도는 조금 느릴 수 있어요. 왜냐하면 작은 조각을 너무 자주 가져와야 하거든요!
BufferedReader는 마치 큰 통에 음식을 가득 담아 한 번에 가져오는 것과 같아요. 예를 들어, 뷔페에서 접시를 가득 채워 한 번에 많이 가져오는 거예요. 이렇게 하면 여러 번 왔다 갔다 하지 않아도 되니까 훨씬 빠르게 음식을 먹을 수 있겠죠?
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
BufferedReader는 데이터를 한꺼번에 메모리 속 버퍼라는 큰 통에 담아서 가져와요. 그래서 데이터를 빠르게 읽을 수 있답니다. 속도가 빠른 이유는 바로 여기 있어요!
여기 뷔페가 있어요. 한 친구는 작은 접시를 가지고 계속 오가며 음식을 조금씩 담아요. 이 친구는 마치 Scanner처럼 데이터를 조금씩 가져오는 거예요.
다른 친구는 큰 접시를 하나 준비해서, 한 번에 많이 담아서 돌아가요. 이 친구는 마치 BufferedReader처럼 큰 통에 데이터를 한 번에 담아와서 더 빠르게 처리할 수 있어요.
이처럼, BufferedReader가 더 효율적인 이유는 한 번에 많은 데이터를 가져오기 때문에 프로그램이 느려지지 않고 빠르게 동작할 수 있는 거예요!
그래서, 만약 프로그램이 아주 빠르게 동작해야 한다면 BufferedReader를 사용하는 게 좋아요. 간단한 입력을 받을 때는 Scanner도 괜찮지만, 큰 데이터를 한꺼번에 많이 받아야 할 때는 BufferedReader가 훨씬 더 효율적이랍니다.
이렇게 하면, 코딩 테스트에서 프로그램을 더 빠르게 만들 수 있어요!
자바 공식 문서 - https://docs.oracle.com/en/java/javase/17/docs/api/index.html
입력 속도 비교(백준) - https://www.acmicpc.net/blog/view/56