Post

Java에서 입력 받는 5가지 방법 완전정복 – Scanner부터 BufferedReader까지 쉽게 설명해드립니다!

Java에서 입력 받는 5가지 방법 완전정복 – Scanner부터 BufferedReader까지 쉽게 설명해드립니다!

왜 자바 입력을 알아야 할까?

자바에서 사용자의 입력을 받는 방법은 여러 가지가 있어요.
백준, 프로그래밍 과제, 웹 개발 등 어디서든 사용자 입력은 필수죠.

근데… Scanner, BufferedReader, System.in 등등 이름은 너무 많고 어렵게 느껴지죠?
이 글 하나면 처음 배우는 사람도 자바 입력의 모든 흐름을 이해할 수 있습니다.


전체 흐름 한눈에 보기

1
2
3
4
5
6
7
8
[키보드]
   ↓
[System.in] (입력받는 통로)
   ↓
→ Scanner  
→ BufferedReader  
→ InputStreamReader  
→ System.in.read()

1️⃣ System.in? 이게 뭐야?

System.in은 “키보드에서 입력받는 통로”라고 생각하면 돼요.

예제:

1
2
int ch = System.in.read();  // 문자 하나 읽기
System.out.println((char) ch);
  • 이건 문자 1개만 읽을 수 있어요
  • 숫자를 입력해도 글자처럼 받아들여요 (예: ‘3’ → 51)

2️⃣ Scanner: 가장 많이 쓰는 입력 방법

Scanner는 초보자가 제일 많이 쓰는 방법이에요.

1
2
3
4
5
import java.util.Scanner;

Scanner sc = new Scanner(System.in);
int a = sc.nextInt();  // 숫자 하나 입력
String s = sc.next();  // 단어 하나 입력

장점

  • 사용법이 직관적 (nextInt, nextLine 등)
  • 숫자, 문자열 모두 쉽게 받을 수 있음

단점

  • 속도는 느림
  • 가끔 줄바꿈 때문에 오류 발생 (nextInt() 후 nextLine())

3️⃣ InputStreamReader: 중간 번역기

System.in은 바이트(숫자)를 받아요.
근데 자바는 문자(char)가 필요하죠?
그래서 InputStreamReader가 byte → char로 바꿔주는 번역기 역할을 해요.

1
2
3
InputStreamReader isr = new InputStreamReader(System.in);
int ch = isr.read();
System.out.println((char) ch);

그냥 참고용으로, 직접 많이 쓰진 않아요.


4️⃣ BufferedReader: 속도가 가장 빠른 입력

BufferedReader는 줄 단위 입력을 빠르게 받을 수 있어요.
백준이나 알고리즘에서 많이 씁니다.

1
2
3
4
5
import java.io.*;

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = br.readLine();  // 한 줄 전체 입력
System.out.println(line);

장점

  • Scanner보다 훨씬 빠름
  • 대량 입력에 적합

단점

  • 숫자나 단어는 직접 잘라서 처리해야 함
    → Integer.parseInt(), split(“ “) 등 직접 써야 함

5️⃣ Scanner vs BufferedReader 차이

항목ScannerBufferedReader
속도느림빠름
사용 편의성쉽다복잡함
숫자 입력nextInt() 등 제공직접 파싱 필요
문자열 입력next(), nextLine()readLine()

어떤 걸 언제 써야 할까?

상황추천 입력 방식
자바 처음 배우는 중Scanner (쉬움)
빠르게 많은 줄 읽어야 할 때BufferedReader (빠름)
문자 하나씩 처리할 때System.in.read()

마무리 요약

  • System.in: 입력 통로 (기본)
  • Scanner: 쉬움, 자주 쓰임
  • BufferedReader: 빠름, 어렵지만 실전용
  • InputStreamReader: 중간 단계 (Scanner/BufferedReader 내부에 존재)

코딩 테스트에서는 뭘 써야 할까?

코딩 테스트(예: 백준, 프로그래머스)에서는 입력 속도가 정답과 직접 연결되는 경우가 많아요.
예를 들어, 입력 데이터가 1,000,000줄이라면 느린 입력 방식은 시간 초과가 날 수 있습니다.

그래서 추천은?

  • 초급 문제 + 입력 줄이 적을 때 → Scanner
  • 중~고급 문제 + 입력량이 많을 때 → BufferedReader + StringTokenizer
1
2
3
4
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());

Scanner보다 훨씬 빠르고, split()보다도 빠릅니다. 정리: 실전 코딩 테스트에서는 Scanner보다 BufferedReader가 안전하고 빠릅니다.

This post is licensed under CC BY 4.0 by the author.