2.5 키보드 입력과 Scanner 사용 – 표준 입력을 통해 값 읽어오기, Scanner 클래스 활용
여러분, 프로그램 실행 도중에 사용자로부터 직접 값을 입력받을 수 있다면 훨씬 유연하고 똑똑한 코드가 될 수 있다는 사실, 알고 계셨나요? 바로 Scanner가 그 핵심 역할을 해낸답니다!
안녕하세요, 자바 학습자 여러분 😊 오늘은 자바 프로그램에서 키보드를 통해 데이터를 입력받는 방법을 배워볼 거예요. 사실 지금까지는 값을 직접 코드에 써 넣는 방식으로만 프로그램을 작성했을 텐데요, 이제는 사용자가 직접 입력한 정보를 읽어올 수 있는 표준 입력 방식에 대해 배워볼 차례입니다! Scanner
클래스는 자바에서 매우 자주 쓰이는 입력 도구인데요, 그만큼 실전에서도 활용도가 아주 높아요. 특히 초보 개발자 분들이 처음으로 사용자와 상호작용하는 프로그램을 만들어볼 수 있는 좋은 기회가 되니, 이번 주제 놓치지 말고 꼭 챙겨보세요!
목차
1. 키보드 입력이란? 🤔
자바 프로그램에서 키보드 입력은 사용자로부터 실시간으로 값을 입력받는 방법입니다. 보통 우리가 작성한 프로그램은 정해진 값을 기준으로 동작하죠. 하지만 키보드 입력 기능이 들어가면 사용자의 행동에 따라 결과가 달라지는 인터랙티브한 프로그램이 됩니다.
예를 들어, 사용자의 이름을 입력받아 인사 메시지를 출력하거나, 두 수를 입력받아 더한 결과를 보여주는 프로그램처럼요! 이런 기능을 만들기 위해선 표준 입력
이라는 개념을 이해해야 합니다.
🧾 표준 입력(Standard Input)의 개념
- 운영체제에서 표준 입력 장치는 보통 키보드입니다.
- 자바는 이 입력을 읽기 위해
System.in
스트림을 제공합니다. -
System.in
은 기본적으로 바이트 단위로 입력을 처리합니다.
💡 하지만 문자열이나 숫자 입력을 처리하려면?
이때 등장하는 것이 바로 Scanner 클래스입니다. Scanner는 System.in을 기반으로 문자열, 정수, 실수 등 다양한 자료형을 손쉽게 읽을 수 있게 도와주는 아주 고마운 도구랍니다.
📋 정리: 키보드 입력 이해 포인트
항목 | 내용 |
---|---|
표준 입력 | System.in으로 처리되는 기본 키보드 입력 스트림 |
문자 처리 | System.in은 바이트 단위로만 처리하기 때문에 불편함 존재 |
Scanner | System.in을 쉽게 사용할 수 있도록 도와주는 입력 처리 클래스 |
다음 섹션에서는 본격적으로 Scanner 클래스가 뭔지, 왜 쓰는지, 그리고 어떻게 쓰는지를 차근차근 알려드릴게요! 🔍
2. Scanner 클래스의 개념과 필요성 📚
Scanner
클래스는 자바에서 사용자 입력을 쉽게 처리하기 위해 제공되는 도구입니다. 콘솔에 입력한 데이터를 텍스트 단위로 읽어들여 원하는 데이터 형식으로 바꾸어줍니다. 복잡한 입출력 처리를 직접 구현하지 않고도 다양한 형식의 데이터를 손쉽게 다룰 수 있어요.
🔍 Scanner 클래스의 주요 기능
- 문자열 입력 → next(), nextLine()
- 정수 입력 → nextInt()
- 실수 입력 → nextDouble(), nextFloat()
🧠 왜 Scanner가 필요한가요?
- 입력을 자동으로 자료형에 맞게 변환해줘서 따로 파싱할 필요가 없어요.
- 한 줄 전체 혹은 공백 단위로 유연하게 읽기가 가능해요.
- 자바에서 제공하는 API라 설정 없이 바로 사용 가능하죠!
📌 Scanner 클래스 선언 예시
import java.util.Scanner;
public class InputExample {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); // Scanner 객체 생성
System.out.print("이름을 입력하세요: ");
String name = sc.nextLine(); // 문자열 입력 받기
System.out.println("안녕하세요, " + name + "님!");
}
}
📢 Scanner 사용 시 주의할 점
next()
와 nextLine()
은 작동 방식이 달라서 입력값이 의도와 다르게 처리될 수 있어요. 줄바꿈(\n) 문제를 주의해서 사용해야 합니다. 이 부분은 뒤에서 더 자세히 다룰게요.
지금까지 Scanner
의 기본 개념을 살펴봤어요. 다음 파트에서는 이 Scanner를 실제로 어떻게 쓰는지 단계별로 알아볼 거예요!
3. Scanner 클래스 기본 사용법 🔤
Scanner
클래스는 입력을 다룰 수 있는 다양한 메서드를 제공합니다. 가장 기본적인 사용법은 객체를 생성한 뒤, 필요한 입력 메서드를 호출하는 방식입니다.
✅ Scanner 객체 생성
Scanner sc = new Scanner(System.in);
위 코드는 키보드 입력을 받을 준비를 하는 것이고, sc
는 Scanner 객체의 이름입니다. 다른 이름을 써도 되지만, sc는 관례적으로 많이 사용됩니다.
🧾 주요 입력 메서드
메서드 | 설명 |
---|---|
next() |
단어 하나 (공백 전까지) |
nextLine() |
줄 전체 입력 (엔터 전까지) |
nextInt() |
정수 입력 |
nextDouble() |
실수 입력 |
📌 주의! next() vs nextLine()
많은 초보자들이 실수하는 부분이 바로 next()
와 nextLine()
의 차이입니다. next()는 공백 전까지만 읽고, nextLine()은 한 줄 전체를 읽습니다. 그래서 앞에 nextInt()
등을 사용하고 바로 nextLine()
을 쓰면, 줄바꿈 문자(\n)가 남아서 빈 문자열을 읽는 문제가 발생합니다.
🎯 입력 처리 기본 예제
import java.util.Scanner;
public class InputTypes {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("이름을 입력하세요: ");
String name = sc.nextLine();
System.out.print("나이를 입력하세요: ");
int age = sc.nextInt();
System.out.println("이름: " + name);
System.out.println("나이: " + age);
}
}
다음 장에서는 정수, 실수, 문자열 등 다양한 자료형을 입력받는 방법을 좀 더 구체적으로 살펴볼게요!
4. 다양한 자료형 입력 받기 🎛
Scanner
클래스를 활용하면 다양한 자료형의 입력을 받을 수 있습니다. 대표적으로 문자열, 정수, 실수, 불린값 등을 처리할 수 있어요. 아래에 각각의 자료형별 입력 방식과 주의할 점을 정리해드릴게요.
📦 자료형별 입력 메서드
자료형 | 메서드 | 예시 |
---|---|---|
문자열 | nextLine() |
sc.nextLine(); |
정수 | nextInt() |
sc.nextInt(); |
실수 (double) | nextDouble() |
sc.nextDouble(); |
실수 (float) | nextFloat() |
sc.nextFloat(); |
불린 (true/false) | nextBoolean() |
sc.nextBoolean(); |
💡 예외 상황 주의하기
- 숫자 입력 시 숫자가 아닌 문자를 입력하면 InputMismatchException 오류 발생
- nextInt() → nextLine() 순으로 쓸 때 줄바꿈 문제로 빈 값 입력될 수 있음
🧪 실습 예제: 다양한 입력 받기
import java.util.Scanner;
public class InputTypesExample {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("문자열 입력: ");
String text = sc.nextLine();
System.out.print("정수 입력: ");
int number = sc.nextInt();
System.out.print("실수 입력: ");
double dnum = sc.nextDouble();
System.out.print("참/거짓 입력 (true/false): ");
boolean flag = sc.nextBoolean();
System.out.println("입력된 문자열: " + text);
System.out.println("입력된 정수: " + number);
System.out.println("입력된 실수: " + dnum);
System.out.println("입력된 불린값: " + flag);
}
}
다양한 자료형을 입력받고 출력해보는 간단한 프로그램이지만, 실제 프로젝트에서도 아주 유용하게 쓰이는 패턴이랍니다. 다음 장에서는 입력 도중 발생할 수 있는 오류와 그 해결법을 살펴볼게요. 🙌
5. 자주 발생하는 입력 오류와 해결법 🛠
Scanner를 사용할 때 가장 자주 마주치는 문제는 바로 입력값의 처리 순서와 예외 발생입니다. 특히 nextInt()
와 nextLine()
의 혼용, 사용자가 예상치 못한 값을 입력했을 때 프로그램이 멈추는 현상 등이 대표적이에요.
😵 nextInt() 사용 후 nextLine()이 무시될 때
nextInt()
는 숫자 입력 후 엔터키(\n)는 읽지 않고 남깁니다. 그래서 그 다음 nextLine()
이 실행되면, 남아 있던 줄바꿈 문자를 그대로 읽어버려서 빈 문자열이 입력된 것처럼 처리되죠.
System.out.print("나이 입력: ");
int age = sc.nextInt(); // 숫자 입력
sc.nextLine(); // 줄바꿈 제거용 (중요!)
System.out.print("이름 입력: ");
String name = sc.nextLine(); // 이제 정상적으로 입력 받음
⚠️ InputMismatchException 예외
nextInt()
나 nextDouble()
은 숫자만을 입력받아야 하는데, 사용자가 실수로 문자열이나 특수기호를 입력하면 InputMismatchException
이 발생해요.
🛡 해결 방법
- try-catch 문으로 예외 처리하기
- 문자열로 먼저 받은 후
Integer.parseInt()
로 변환
try {
int age = sc.nextInt();
} catch (InputMismatchException e) {
System.out.println("정수를 입력해주세요!");
}
📝 오류 상황 정리
오류 상황 | 원인 | 해결책 |
---|---|---|
nextLine()이 건너뛰어짐 | nextInt() 이후 줄바꿈 문자가 남아있음 | sc.nextLine() 한 번 호출해서 제거 |
입력 예외 발생 | 입력값과 메서드 자료형 불일치 | try-catch로 예외 처리 |
입력 도중 발생하는 오류는 처음에는 꽤 당황스럽지만, 그 원인을 정확히 알면 금방 해결할 수 있어요. 이제 마지막으로, Scanner를 활용한 실전 예제를 만들어 보며 정리해볼게요! 🎯
6. Scanner를 활용한 입력 예제 실습 ✍️
이제 우리가 배운 내용을 종합해서 Scanner 클래스를 실제로 사용하는 프로그램을 만들어 볼 차례예요. 이 실습에서는 문자열, 정수, 실수를 모두 입력받아 처리해보는 간단한 인터랙티브 콘솔 애플리케이션을 구현해봅니다. 🎮
🎯 목표
- 사용자로부터 이름, 나이, 키(cm)를 입력받기
- 입력된 정보를 바탕으로 간단한 인사 메시지 출력하기
📌 실전 코드
import java.util.Scanner;
public class UserProfile {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("이름을 입력하세요: ");
String name = sc.nextLine();
System.out.print("나이를 입력하세요: ");
int age = sc.nextInt();
sc.nextLine(); // 버퍼 비우기
System.out.print("키(cm)를 입력하세요: ");
double height = sc.nextDouble();
System.out.println("\n--- 입력 결과 ---");
System.out.println("이름: " + name);
System.out.println("나이: " + age + "세");
System.out.println("키: " + height + "cm");
System.out.println("\n반갑습니다, " + name + "님! 👋");
}
}
✅ 실행 예시
이름을 입력하세요: 민수
나이를 입력하세요: 24
키(cm)를 입력하세요: 175.5
--- 입력 결과 ---
이름: 민수
나이: 24세
키: 175.5cm
반갑습니다, 민수님! 👋
🔍 실습을 통해 확인할 포인트
- 입력 순서에 따라 줄바꿈 처리가 필요한 부분을 확인했나요?
- 다양한 자료형 입력을 자연스럽게 처리할 수 있었나요?
이제 여러분도 Scanner를 활용한 사용자 입력 처리를 충분히 이해하셨을 거예요. 다음 섹션에서는 마무리로 이 장에서 배운 핵심 내용을 정리하고, 태그와 함께 마무리 인사를 전하겠습니다 😊
마무리하며 ✨
이번 글에서는 자바에서 사용자로부터 값을 입력받기 위한 Scanner 클래스의 개념부터 실제 활용까지 꼼꼼히 살펴봤습니다. 단순히 값을 출력하는 프로그램을 넘어서, 사용자의 입력을 받아 동적으로 동작하는 프로그램을 만드는 데 있어 Scanner
는 매우 강력한 도구라는 걸 알 수 있었죠.
특히 nextInt()
와 nextLine()
의 차이, 입력 예외 처리, 줄바꿈 버퍼 문제 등은 실무와 과제 모두에서 자주 마주치는 포인트이니 꼭 익혀두시기 바랍니다. 입력 예제 실습까지 직접 해보셨다면, 이제 여러분도 키보드 입력과 Scanner는 마스터하셨다고 봐도 좋아요! 💯
다음 장에서는 조건문과 흐름 제어에 대해 배워보게 될 텐데요, 그 전에 이번 Scanner 실습을 조금 더 응용해서 미니 계산기나 간단한 설문 프로그램도 한번 도전해보는 건 어떨까요? 😉
'JAVA' 카테고리의 다른 글
[FirstJava] 3.1 조건 분기문 완전 정복 💡 – if문, else문, switch문까지 한 번에! (2) | 2025.05.29 |
---|---|
[FirstJava] 2.6 실습: 변수와 연산자 활용 – 키보드로 두 수를 입력받아 사칙연산 계산하기 (1) | 2025.05.28 |
[FirstJava] 2.4 연산자 우선순위 개념과 괄호를 통한 제어 (1) | 2025.05.26 |
[FirstJava] 2.3 연산자와 표현식 – 산술, 대입, 비교, 논리 연산자 및 삼항 연산자 사용법 (1) | 2025.05.23 |
[FirstJava] 2.2 리터럴과 형 변환 – 정수/실수/문자 리터럴, 자료형 간의 묵시적/명시적 형 변환 (1) | 2025.05.22 |