
🔑 Scanner: 컴퓨터에게 말해주는 창문
안녕! Scanner (스캐너)는 컴퓨터에게 **"사용자(너)에게서 정보를 받아와!"**라고 명령하는 도구예요.
Scanner는 마치 컴퓨터와 우리 사이에 있는 창문 같아요. 우리가 키보드⌨️로 글자나 숫자를 입력하면, Scanner가 이 창문을 통해 그 정보를 읽어서 프로그램에게 전달해 주는 거죠.
💡 Scanner는 언제 쓰나요?
Scanner는 프로그램이 실행되는 도중에 사용자(너)의 입력이 필요할 때 언제든지 사용해요.
가장 쉽게 말하면, 컴퓨터가 우리에게 질문을 하고 우리가 키보드로 대답해야 할 때 쓰는 거예요!
| 상황 | 예시 |
| 이름 물어보기 | "네 이름은 뭐니?" → (내가 키보드로 이름 입력) |
| 계산할 숫자 받기 | "첫 번째 숫자를 입력하세요." → (내가 숫자 입력) |
| 게임에서 선택 받기 | "가위, 바위, 보 중 하나를 입력하세요." → (내가 선택 입력) |
📝 Scanner 사용 예제: 이름과 나이 입력받기
자바에서 Scanner가 어떻게 작동하는지 쉽게 알아볼게요. 마치 컴퓨터가 우리에게 자기소개를 시키는 것과 같아요!
1. Scanner를 준비해요 (도구 상자를 꺼내는 것처럼)
import java.util.Scanner;
// Scanner를 사용할 준비를 해줘!
public class ScannerExample {
public static void main(String[] args) {
// [1] Scanner라는 도구를 새로 만들어서 'scan'이라고 이름을 붙여줘.
// 이 도구는 키보드(System.in)에서 정보를 읽어올 거야.
Scanner scan = new Scanner(System.in);
// ... (아래에서 사용할 코드)
}
}
2. 이름 입력받기 (글자 읽기)
컴퓨터가 우리에게 질문을 하고, 우리가 키보드로 입력한 **글자(문자열)**를 scan.nextLine()으로 읽어와서 저장해요.
System.out.print("네 이름은 뭐니? ");
// 화면에 질문을 보여줘
String name = scan.nextLine();
// 사용자가 키보드로 친 "글자 전체"를 읽어서 name에 저장해
3. 나이 입력받기 (숫자 읽기)
이번엔 질문을 하고, 우리가 입력한 숫자를 scan.nextInt()로 읽어와서 저장해요.
System.out.print("나이는 몇 살이니? ");
// 화면에 질문을 보여줘
int age = scan.nextInt();
// 사용자가 키보드로 친 "정수(숫자)"를 읽어서 age에 저장해
4. 결과 보여주기
입력받은 정보를 사용해서 화면에 인사를 합니다.
System.out.println("안녕, " + name + "!");
System.out.println("너는 " + age + "살이구나. 만나서 반가워!");
scan.close(); // 다 썼으니 Scanner 도구를 닫아줘.
💻 전체 코드와 실행 결과
📝 문자열(String) 입력받기: next() vs nextLine()
1. next() 메서드 (공백 전까지 한 단어 입력)
next() 메서드는 공백 문자(Space, Tab, Enter 등)를 만나기 전까지의 문자열(String)을 읽어옵니다. 즉, 한 단어만 입력받을 때 유용합니다.
import java.util.Scanner;
public class StringInputNext {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("단어를 입력하세요: ");
// 사용자가 "Hello World"를 입력하면, "Hello"만 읽어옵니다.
String word = scanner.next();
System.out.println("입력된 단어: " + word);
// 출력 (사용자가 "Hello World" 입력 시): 입력된 단어: Hello
scanner.close();
}
}
2. nextLine() 메서드 (한 줄 전체 입력)
nextLine() 메서드는 Enter 키를 누를 때까지 입력 버퍼의 한 줄 전체를 읽어옵니다. 공백을 포함한 문장이나 주소 등을 입력받을 때 사용합니다.
import java.util.Scanner;
public class StringInputNextLine {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("문장을 입력하세요: ");
// 사용자가 "Hello World"를 입력하면, "Hello World" 전체를 읽어옵니다.
String sentence = scanner.nextLine();
System.out.println("입력된 문장: " + sentence);
// 출력 (사용자가 "Hello World" 입력 시): 입력된 문장: Hello World
scanner.close();
}
}
3. 단일 문자(char) 입력받기
Java의 Scanner에는 단일 문자를 직접 읽는 메서드는 없으므로, 문자열로 입력받은 후 첫 번째 문자만 추출하는 방식으로 사용합니다.
import java.util.Scanner;
public class CharInput {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("성별 (M/F)을 입력하세요: ");
// 1. 문자열로 입력받은 후 (여기서는 next() 사용)
String input = scanner.next();
// 2. String의 charAt(0) 메서드를 사용하여 첫 번째 문자만 추출
char gender = input.charAt(0);
System.out.println("입력된 성별: " + gender);
scanner.close();
}
}
nextInt()와 next()의 차이 정리
Scanner 클래스에서 정수(Integer)나 문자열(String) 입력을 받을 때 사용하는 nextInt()와 next() 메서드의 가장 큰 차이는 읽어들이는 데이터의 자료형과 입력 구분 기준입니다.
1. 🔍 자료형 및 용도
| 메서드 | 반환 자료형 | 용도 |
| nextInt() | int (정수형) | 사용자 입력에서 다음 정수 값을 읽어옵니다. |
| next() | String (문자열) | 사용자 입력에서 다음 **토큰(단어)**을 읽어옵니다. |
2. ✂️ 입력 구분 기준 (Delimiter)
두 메서드 모두 입력 데이터를 **공백(Space, Tab, Enter 등)**을 기준으로 분리된 **토큰(Token)**으로 간주하고 처리하지만, 다음 토큰을 읽는 방식에 미묘한 차이가 있습니다.
| 메서드 | 입력 처리 방식 |
| nextInt() | 입력 스트림에서 다음 유효한 정수 토큰을 찾을 때까지 공백을 건너뛴 후, 해당 정수를 읽어 int 타입으로 반환합니다. |
| next() | 입력 스트림에서 다음 공백이 아닌 문자열 토큰을 찾을 때까지 공백을 건너뛴 후, 해당 단어(토큰)를 읽어 String 타입으로 반환합니다. |
핵심 차이:
nextInt()는 숫자가 아닌 문자열을 만나면 InputMismatchException을 발생시키지만, next()는 숫자든 문자든 공백 전까지의 모든 것을 문자열로 취급합니다.
3. 🚨 입력 버퍼 처리의 차이 (중요)
이것은 두 메서드를 함께 사용할 때 가장 흔하게 발생하는 문제입니다.
- nextInt() 또는 next() 사용 후: 이 두 메서드는 토큰(정수나 단어)만 읽어오고, 토큰 뒤에 남아있는 엔터(\n)와 같은 공백 문자는 입력 버퍼에 그대로 남겨둡니다.
- 문제 발생: 이어서 **nextLine()**을 호출하면, nextLine()은 버퍼에 남아있던 그 잔여 엔터 문자를 바로 읽어버리고 사용자 입력을 기다리지 않고 건너뛰게 됩니다(버퍼 비우기).
예시 코드:
Scanner scanner = new Scanner(System.in);
System.out.print("나이 입력: ");
int age = scanner.nextInt(); // 1. 정수만 읽고 엔터(\n)는 버퍼에 남김
scanner.nextLine();
System.out.print("이름 입력: ");
// 2. nextLine()이 버퍼에 남아있는 엔터(\n)를 읽고 바로 종료됨
String name = scanner.nextLine();
// 이 문제를 해결하려면, nextInt() 후 nextLine()을 한 번 더 호출해서 잔여 엔터를 비워줘야 합니다.
// scanner.nextLine(); // <- 이 코드를 nextInt() 뒤에 추가해야 함
'Java_language' 카테고리의 다른 글
| 상수, 리터럴, 형 변환 (0) | 2025.11.17 |
|---|---|
| 자바(Java) 변수: 값을 담는 '상자'로 쉽게 이해하기! (0) | 2025.11.13 |
| 간단한 사칙연산 계산기 (0) | 2025.11.12 |
| 2강 변수와 자료형 연습문제 (0) | 2025.11.12 |
| Java 개발 환경 설정 (Visual Studio Code) (0) | 2025.11.10 |