Java에서 Scanner
클래스는 사용자로부터 입력을 받거나 파일을 읽을 때 유용한 도구이다. java.util.Scanner
패키지에 포함되어 있으며, 다양한 입력 소스를 처리할 수 있다. 가장 일반적인 용도는 콘솔 입력 처리이며, 파일 또는 문자열 입력에도 사용된다.
Scanner를 사용하려면 먼저 import java.util.Scanner;
를 추가해야 한다. 그런 다음 System.in
을 사용하여 입력을 받을 수 있다.
import java.util.Scanner;
public class ScannerExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("이름을 입력하세요: ");
String name = scanner.nextLine();
System.out.print("나이를 입력하세요: ");
int age = scanner.nextInt();
System.out.println("이름: " + name + ", 나이: " + age);
scanner.close(); // 리소스 해제를 위해 닫기
}
}
Scanner는 여러 가지 데이터 타입을 읽을 수 있다.
메서드 | 설명 |
---|---|
next() | 공백(스페이스, 개행 문자) 전까지 단어를 입력받음 |
nextLine() | 한 줄 전체를 입력받음 |
nextInt() | 정수를 입력받음 |
nextDouble() | 실수를 입력받음 |
nextBoolean() | true 또는 false 값을 입력받음 |
파일을 읽을 때도 Scanner
를 사용할 수 있다.
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class FileScannerExample {
public static void main(String[] args) {
try {
File file = new File("example.txt");
Scanner scanner = new Scanner(file);
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
System.out.println(line);
}
scanner.close();
} catch (FileNotFoundException e) {
System.out.println("파일을 찾을 수 없습니다.");
}
}
}
Scanner는 스트림을 사용하므로 반드시 닫아야 한다. 닫지 않으면 리소스 누수가 발생할 수 있다.
scanner.close()
사용하기Scanner
는 내부적으로 입력 스트림을 사용하므로 close()
메서드를 호출하여 스트림을 닫아야 한다.
Scanner scanner = new Scanner(System.in);
// 입력 처리
scanner.close();
try-with-resources
를 사용하면 자동으로 Scanner
를 닫을 수 있다.
import java.util.Scanner;
public class TryWithResourcesExample {
public static void main(String[] args) {
try (Scanner scanner = new Scanner(System.in)) {
System.out.print("이름을 입력하세요: ");
String name = scanner.nextLine();
System.out.println("안녕하세요, " + name + "!");
} // 자동으로 scanner.close() 호출됨
}
}
Scanner는 내부적으로 입력 스트림(System.in
, 파일 스트림 등)을 사용한다. 이를 닫지 않으면 메모리 누수 및 리소스 낭비가 발생할 수 있다. 특히 파일을 다룰 때는 리소스를 정리하지 않으면 다른 프로그램이 파일을 열 수 없는 문제가 발생할 수 있다.
네, 가능하지만 System.in을 사용한 Scanner를 여러 번 열고 닫으면 문제가 발생할 수 있다. System.in
을 닫으면 이후에 다시 열 수 없으므로, 한 번만 생성하고 마지막에 닫는 것이 좋다.
Scanner scanner = new Scanner(System.in);
// 여러 입력 처리
scanner.close();
nextLine()
과 nextInt()
를 함께 사용하면 문제가 발생하는 이유는?nextInt()
를 호출하면 숫자만 읽고 개행 문자(\n
)를 남긴다. 이후 nextLine()
이 실행될 때, 개행 문자를 읽어 빈 입력처럼 동작한다.
해결 방법: nextLine()
을 추가해서 개행 문자를 처리한다.
Scanner scanner = new Scanner(System.in);
System.out.print("나이를 입력하세요: ");
int age = scanner.nextInt();
scanner.nextLine(); // 개행 문자 제거
System.out.print("이름을 입력하세요: ");
String name = scanner.nextLine();
System.out.println("이름: " + name + ", 나이: " + age);
scanner.close();
Scanner
가 FileNotFoundException
을 발생시킬 수 있으므로 예외 처리가 필요하다.close()
를 호출해야 한다.Scanner
보다 속도가 빠르며 대량의 데이터 처리에 유리하다.import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BufferedReaderExample {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("이름을 입력하세요: ");
String name = reader.readLine();
System.out.println("이름: " + name);
}
}
Java의 Scanner
는 입력을 받을 때 매우 유용하지만, 사용 후 반드시 닫아야 하며 nextInt()
와 nextLine()
을 함께 사용할 때 주의해야 한다. try-with-resources
를 활용하면 자동으로 리소스를 정리할 수 있으며, 파일 입력에도 효과적으로 사용할 수 있다. 필요에 따라 BufferedReader
와 같은 대안을 고려할 수도 있다.
엑셀365에서 ActiveX 컨트롤은 사용자가 더욱 정교하고 인터랙티브한 사용자 인터페이스(UI)를 구성할 수 있도록 도와주는 고급 도구입니다.…
엑셀365 폼 컨트롤로 양식 자동화하기 실무 가이드 엑셀365의 폼 컨트롤(Form Controls) 기능은 사용자가 데이터 입력을…
엑셀365에는 수백 개의 기본 내장 함수가 있지만, 실무에서는 내장 함수만으로 부족한 상황이 종종 발생합니다. 이럴…
엑셀365에서 VBA(Visual Basic for Applications) 매크로는 반복되는 작업을 자동화하고, 사용자의 클릭이나 입력에 반응하여 맞춤형 엑셀…
엑셀365 슬라이서 기능으로 피벗 테이블 분석 효율 높이기 엑셀365의 슬라이서(Slicer) 기능은 피벗 테이블이나 표에서 필터링을…