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 차이
항목 | Scanner | BufferedReader |
---|---|---|
속도 | 느림 | 빠름 |
사용 편의성 | 쉽다 | 복잡함 |
숫자 입력 | 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.