
이미지 출처: Pexels (Matheus Bertelli) · Pexels License
지금까지 만든 프로그램은 값을 미리 코드에 적어 두고 돌렸습니다. 하지만 진짜 프로그램은 사용자에게 값을 물어봐야 합니다. 나이를 묻고, 이름을 받고, 숫자를 입력받습니다. 그 창구가 바로 오늘의 주제, Scanner입니다.
Scanner가 뭔가요?
Scanner는 키보드로 들어온 입력을 대신 받아 적어 주는 도우미입니다.
쉽게 — Scanner는 주문을 받아 적는 종업원입니다. 손님(사용자)이 말하면(키보드 입력), 종업원이 받아 적어 주방(프로그램)에 넘깁니다. 우리는 "정수로 받아 줘", "한 줄 통째로 받아 줘" 하고 시키기만 하면 됩니다.
쓰기 전에 딱 한 줄, Scanner를 준비합니다.
import java.util.Scanner; // 맨 위에 한 번
Scanner sc = new Scanner(System.in); // 키보드(System.in)에 연결
import 한 줄은 "Scanner라는 도구를 가져다 쓰겠다"는 선언입니다. 처음엔 그냥 주문서 양식이라고 여기면 됩니다.
자료형마다 받는 메서드가 다릅니다
무엇을 받을지에 따라 부르는 명령이 다릅니다.
쉽게 — 종업원에게 "숫자로 받아 줘", "글자로 받아 줘"라고 종류를 알려 주는 것과 같습니다.
int num = sc.nextInt(); // 정수 하나
double d = sc.nextDouble(); // 실수 하나
String w = sc.next(); // 단어 하나(공백 전까지)
String line = sc.nextLine(); // 한 줄 통째로(공백 포함)

| 메서드 | 받는 것 | 특징 |
|---|---|---|
nextInt() | 정수 | 숫자만 |
nextDouble() | 실수 | 소수점 가능 |
next() | 단어 | 공백 앞까지만 |
nextLine() | 한 줄 | 공백 포함, 엔터 전까지 |
함정 —
next()는 띄어쓰기를 만나면 거기서 끊습니다."대구 달서구"를next()로 받으면"대구"만 들어옵니다. 주소처럼 띄어쓰기가 있는 값은nextLine()으로 받아야 합니다.
단골 함정 — nextInt 다음의 nextLine은 엔터를 삼킵니다
여기서 초보가 거의 다 한 번은 당합니다. 이름을 물었는데 입력할 새도 없이 넘어가 버립니다.
System.out.print("나이? ");
int age = sc.nextInt(); // 25 입력하고 [엔터]
System.out.print("이름? ");
String name = sc.nextLine(); // 어라, 입력을 못 받고 지나감!
왜 그럴까요? nextInt()는 숫자 25만 가져가고, 뒤에 남은 [엔터]는 그대로 둡니다. 그다음 nextLine()이 그 남은 엔터를 "빈 한 줄"로 읽고 끝나 버립니다.
해결 — 숫자를 받은 뒤
nextLine()으로 한 줄을 받을 때는, 버리는sc.nextLine()을 한 번 넣어 남은 엔터를 치워 줍니다.
System.out.print("나이? ");
int age = sc.nextInt();
sc.nextLine(); // ← 남은 엔터 청소
System.out.print("이름? ");
String name = sc.nextLine(); // 이제 정상 입력
System.out.printf("%s님, %d세%n", name, age);
한 장 정리
| 상황 | 메서드 | 주의 |
|---|---|---|
| 정수·실수 | nextInt / nextDouble | 숫자만 |
| 단어(공백 없음) | next | 공백 앞까지 |
| 문장(공백 포함) | nextLine | 엔터 전까지 |
| 숫자 뒤에 한 줄 받기 | nextLine 하나 버리고 받기 | 엔터 삼킴 방지 |
이것만 기억하면 됩니다. Scanner는 입력을 받아 적는 종업원이고, 받을 종류에 맞는 메서드를 부릅니다. 숫자를 받은 뒤 문장을 받을 땐 버리는 nextLine() 한 번을 꼭 넣습니다.
미니 퀴즈
개념을 제대로 잡았는지 직접 풀어 봅니다. 정답은 눌러야 나옵니다.
미니 퀴즈
포켓코딩(JAVA1) 4편 · 예제 출처: 강사 개인 GitHub 저장소. 다음 편: 연산자 — 계산·비교·비트.