[Kotlin] BufferedReader

MariGold·2026년 2월 11일

[Kotlin]

목록 보기
21/23

Kotlin에서 대량의 입력을 빠르게 처리하려면 BufferedReader를 사용하는 것이 일반적입니다.
특히 코딩 테스트처럼 입력이 많은 환경에서는 기본 readLine()보다 훨씬 뛰어난 성능을 제공합니다.

하지만 BufferedReader는 단독으로 사용되지 않습니다.
System.in과 InputStreamReader를 함께 사용하여 입력 스트림을 효율적으로 처리합니다.


🚀 BufferedReader란?

BufferedReader는 입력 데이터를 버퍼에 저장해 두었다가 한 줄씩 읽어오는 클래스입니다.
입출력(I/O)은 비용이 큰 작업이기 때문에, 한 번에 많이 읽어두고 처리하는 것이 성능상 유리합니다.


🚀 System.in이란?

System.in은 표준 입력(Standard Input) 스트림입니다. 쉽게 말해, 우리가 콘솔에서 입력하는 데이터를 프로그램으로 전달해주는 통로입니다.

  • 타입: InputStream
  • 바이트(byte) 단위로 데이터를 읽음

즉, System.in은 문자열이 아니라 바이트 스트림입니다.


🚀 InputStreamReader란?

InputStreamReader는 바이트 스트림을 문자 스트림으로 변환해주는 역할을 합니다.

  • System.in → 바이트 입력
  • InputStreamReader → 바이트를 문자로 변환
  • BufferedReader → 변환된 문자를 버퍼에 저장 후 한 줄씩 읽기

즉, 데이터 흐름은 다음과 같습니다.

System.in (바이트 입력) -> InputStreamReader (문자 변환) -> BufferedReader (버퍼링 + 줄 단위 읽기)


💻 사용 예시

import java.io.BufferedReader
import java.io.InputStreamReader

val br = BufferedReader(InputStreamReader(System.`in`))

val n = br.readLine().toInt()
val input = br.readLine()

동작 과정

  1. System.in이 콘솔 입력을 바이트 형태로 받음
  2. InputStreamReader가 이를 문자로 변환
  3. BufferedReader가 내부 버퍼에 저장
  4. readLine()으로 한 줄씩 빠르게 읽어옴

⚡ 왜 빠를까?

기본 readLine()은 내부적으로 입력 스트림에 직접 접근하는 방식이라 입력이 많으면 느려질 수 있습니다. 반면 BufferedReader는

  • 한 번에 많은 데이터를 읽음
  • I/O 호출 횟수를 줄임
  • 객체 생성 최소화
  • 대량 입력에서 압도적인 성능 차이

특히 수만~수십만 줄 입력을 처리할 때 속도 차이가 확연히 드러납니다.


🎯 결론

BufferedReader는 단순한 입력 도구가 아니라

  • System.in (바이트 입력)
  • InputStreamReader (문자 변환)
  • BufferedReader (버퍼링 처리)

이 세 가지가 함께 동작하는 구조입니다.
다음과 같은 경우 반드시 사용하는 것이 좋습니다.

  • 코딩 테스트
  • 대량의 파일/콘솔 입력 처리
  • 성능이 중요한 프로그램

입력이 많다면 readLine() 대신 BufferedReader 조합을 기본값처럼 사용하는 것이 좋습니다.

profile
많은 것을 알아가고 싶은 Android 주니어 개발자

0개의 댓글