JAVA

자바 입력받기 — Scanner로 대화하기

PANCO_IT
#자바#JAVA#Scanner#입력

키보드로 입력하는 손

이미지 출처: 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(); // 한 줄 통째로(공백 포함)

Scanner 메서드 4종 비교: nextInt(정수), nextDouble(실수), next(단어·공백 앞까지), 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() 한 번을 꼭 넣습니다.

미니 퀴즈

개념을 제대로 잡았는지 직접 풀어 봅니다. 정답은 눌러야 나옵니다.

미니 퀴즈

OX 2문제 + 4지선다 2문제


포켓코딩(JAVA1) 4편 · 예제 출처: 강사 개인 GitHub 저장소. 다음 편: 연산자 — 계산·비교·비트.

PANCO_IT

IT 지식을 정리하는 개발자

관련 글