Java에서 사용자 입력을 받을 때 가장 많이 사용하는 클래스 중 하나가 바로 Scanner
입니다.
Scanner
는 단순한 키보드 입력뿐만 아니라, 파일, 문자열에서도 데이터를 읽어올 수 있는 강력한 도구입니다.
이번 글에서는 Scanner
객체의 기본적인 사용법부터 다양한 활용법까지 정리해 보겠습니다!
Scanner
는 사용자로부터 입력을 받을 때 사용되는 클래스입니다.
기본적으로 키보드 입력을 받을 수 있지만, 파일이나 문자열에서도 데이터를 읽어올 수 있습니다.
사용하기 위해서는 java.util.Scanner
패키지를 import해야 합니다.
import java.util.Scanner; // Scanner 클래스 가져오기
Scanner 객체를 생성하는 기본 문법은 다음과 같습니다:
Scanner scanner = new Scanner(System.in);
new Scanner(System.in)
: 키보드 입력을 받을 수 있는 Scanner 객체 생성scanner
: Scanner 객체를 담아두는 변수nextLine()
)사용자로부터 문자열(한 줄) 을 입력받을 때는 nextLine()
을 사용합니다.
import java.util.Scanner;
public class ScannerExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("좋아하는 문장을 입력하세요: ");
String sentence = scanner.nextLine(); // 문자열 입력받기
System.out.println("입력한 문장: " + sentence);
}
}
📌 실행 예시
좋아하는 문장을 입력하세요: 자바 공부는 재미있다!
입력한 문장: 자바 공부는 재미있다!
nextInt()
)사용자로부터 정수(Integer) 를 입력받을 때는 nextInt()
를 사용합니다.
import java.util.Scanner;
public class NumberInputExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("나이를 입력하세요: ");
int age = scanner.nextInt(); // 정수 입력받기
System.out.println("당신의 나이는 " + age + "살입니다.");
}
}
📌 실행 예시
나이를 입력하세요: 25
당신의 나이는 25살입니다.
✅ 주의할 점: nextInt()
를 사용한 후 nextLine()
을 연달아 사용할 경우, 입력 버퍼 문제로 인해 제대로 입력되지 않는 문제가 발생할 수 있습니다. 이때는 scanner.nextLine()
을 추가로 한 번 호출하면 해결됩니다.
File
객체와 함께 사용)파일에서 데이터를 읽어올 때도 Scanner
를 사용할 수 있습니다.
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class FileReadExample {
public static void main(String[] args) {
try {
File file = new File("data.txt"); // 읽을 파일 지정
Scanner scanner = new Scanner(file); // 파일을 읽기 위한 Scanner 객체 생성
while (scanner.hasNextLine()) { // 파일에서 한 줄씩 읽기
String line = scanner.nextLine();
System.out.println(line);
}
scanner.close(); // Scanner 닫기 (메모리 해제)
} catch (FileNotFoundException e) {
System.out.println("파일을 찾을 수 없습니다.");
}
}
}
📌 파일(data.txt
) 예시
안녕하세요
이것은 파일에서 읽은 데이터입니다.
📌 실행 결과
안녕하세요
이것은 파일에서 읽은 데이터입니다.
String
사용)Scanner
를 활용하면 문자열에서 특정 데이터를 쉽게 추출할 수도 있습니다.
import java.util.Scanner;
public class StringScannerExample {
public static void main(String[] args) {
String data = "홍길동 25 서울"; // 공백으로 구분된 데이터
Scanner scanner = new Scanner(data); // 문자열을 Scanner로 처리
String name = scanner.next(); // 첫 번째 단어 읽기
int age = scanner.nextInt(); // 두 번째 값(정수) 읽기
String city = scanner.next(); // 세 번째 단어 읽기
System.out.println("이름: " + name);
System.out.println("나이: " + age);
System.out.println("도시: " + city);
scanner.close(); // Scanner 닫기
}
}
📌 실행 결과
이름: 홍길동
나이: 25
도시: 서울
메서드 | 설명 | 예제 |
---|---|---|
nextLine() | 한 줄 입력받음 (띄어쓰기 포함) | Hello World |
next() | 공백 전까지 한 단어 입력 | Hello (띄어쓰기 이후 단어는 무시) |
nextInt() | 정수 입력받음 | 25 |
nextDouble() | 실수 입력받음 | 3.14 |
nextBoolean() | 불리언 입력받음 | true or false |
hasNextLine() | 다음 줄이 있는지 확인 | true or false |
hasNextInt() | 다음 입력이 정수인지 확인 | true or false |
완전 이해돼요! System.out.println()
은 따로 저장하지 않고 바로 쓰는데,
Scanner
는 왜 반드시 new Scanner(System.in);
로 변수를 저장해야 하는지 헷갈릴 수 있어요.
이 차이를 쉽게 정리해볼게요! 🚀
Scanner
는 사용자 입력(키보드), 파일, 문자열에서 데이터를 읽을 수 있는 도구System.in
) 뿐만 아니라, 파일(File)이나 문자열(String)에서도 데이터를 읽을 수 있음nextLine()
, nextInt()
, nextDouble()
등nextInt()
후 nextLine()
사용 시 문제 발생 가능)Scanner
를 잘 활용하면 사용자와 상호작용하는 프로그램을 쉽게 만들 수 있어요! 🚀
System.out.println("Hello, World!");
System.out
자체가 이미 만들어진 객체(instance)
System.out
은 PrintStream
이라는 미리 생성된 객체예요.System.out.println()
을 바로 호출할 수 있음.즉, System.out
은 Java에서 기본적으로 제공하는 "이미 존재하는 객체"라 따로 만들 필요가 없음!
→ 그냥 System.out.println("출력");
하면 됨.
Scanner scanner = new Scanner(System.in);
Scanner
는 기본적으로 만들어져 있지 않음
Scanner
는 사용자가 직접 new Scanner(System.in)
을 통해 만들어야 하는 새로운 객체(instance).Scanner
를 기본적으로 제공하지 않기 때문에, 우리가 직접 객체를 생성해서 변수에 저장해야 함.이해하기 쉽게 비교하자면:
System.out
은 미리 만들어진 프린터기Scanner
는 새로 사서 연결해야 하는 마이크 System.out
)는 이미 있어서 바로 출력 가능 Scanner
)는 직접 사서 연결(new Scanner(System.in)
)해야 입력 받을 수 있음System.out.println() | Scanner | |
---|---|---|
객체 생성 필요? | ❌ (기본 제공됨) | ✅ (new Scanner() 필요) |
사용 방법 | System.out.println("출력"); | Scanner scanner = new Scanner(System.in); |
이유 | System.out 이 이미 존재하는 객체라 바로 사용 가능 | Scanner 는 직접 생성해야만 사용할 수 있음 |
System.out.println()
은 이미 만들어진 프린터기 → 바로 사용 가능Scanner
는 마이크 → 직접 사서(new Scanner(System.in)
) 연결해야 사용 가능Scanner scanner = new Scanner(System.in);
을 써야 하는 것!