초등학생에게 알려주는 자바 입출력 (1) – Scanner vs BufferedReader

Huiju Lee·2023년 9월 26일
2

알고리즘

목록 보기
1/9
post-thumbnail

배경

어느 날, 자바라는 언어를 배우고 코딩 테스트를 준비하는 친구들이 모여 이야기를 나누고 있었어요. 그중 한 친구가 말했어요. "나는 입력을 받을 때마다 프로그램이 느려지는 것 같아!" 다른 친구가 물었어요. "어떤 방법으로 입력을 받고 있어?" 그러자 그 친구는 "나는 항상 Scanner를 써! 쉬워서 좋아!"라고 대답했어요.

그 말을 들은 다른 친구는 이렇게 조언했어요. "사실 BufferedReader라는 방법이 더 빠르다고 해. 우리 한 번 비교해볼래?"

그래서 그 친구들은 각자 ScannerBufferedReader를 사용해 프로그램을 만들어보고, 어떤 방법이 더 빠른지 알아보기로 했어요. 그 결과, 정말로 BufferedReader가 더 빠르다는 걸 알게 되었답니다! 그 이유는 무엇일까요? 같이 알아보자구요!


Scanner

Scanner는 마치 입을 크게 벌리고 한 번에 작은 조각씩 음식을 먹는 것과 비슷해요. 예를 들어, 밥을 한 숟가락씩 떠먹는 것처럼, Scanner는 데이터를 하나씩, 아주 작은 단위로 가져와요.

Scanner sc = new Scanner(System.in);
int number = sc.nextInt();

이렇게 데이터를 하나씩 가져와서 숫자로 바꾸거나 문자열로 바꿀 수 있어요. 편리하긴 하지만, 속도는 조금 느릴 수 있어요. 왜냐하면 작은 조각을 너무 자주 가져와야 하거든요!


BufferedReader

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

profile
이프로의 개발블로그

0개의 댓글