Java User Input
자바에서 사용자 입력 받기 (Java User Input): 개념 및 사용법
자바에서 사용자로부터 입력을 받는 방법은 여러 가지가 있습니다. 가장 많이 사용되는 방법은 Scanner
클래스를 사용하는 것입니다. 이 클래스는 자바의
기본 라이브러리인
.util
패키지에 포함되어 있으며, 콘솔로부터 다양한 타입의 데이터를 읽어오는 데 매우 유용합니다. 이 외에도 **BufferedReader
**와
Console
클래스 등도 사용자 입력을 처리하는 데 사용할 수 있습니다.
이 글에서는 자바에서 사용자 입력을 처리하는 여러 방법과 그 사용법에 대해 설명합니다.
1. Scanner
클래스 사용
Scanner
클래스는 자바에서 가장 많이 사용되는 사용자 입력 처리 방법입니다. Scanner
는 문자열, 정수, 실수 등 다양한
데이터 타입의 입력을 처리할 수 있으며, 매우 직관적입니다.
Scanner
클래스 사용 예제
import java.util.Scanner; // Scanner 클래스 import
public class Main {
public static void main(String[] args) {
// Scanner 객체 생성 (System.in은 표준 입력을 의미)
Scanner scanner = new Scanner(System.in);
// 문자열 입력 받기
System.out.print("Enter your name: ");
String name = scanner.nextLine(); // nextLine()은 한 줄의 문자열 입력
// 정수 입력 받기
System.out.print("Enter your age: ");
int age = scanner.nextInt(); // nextInt()는 정수 입력
// 실수 입력 받기
System.out.print("Enter your GPA: ");
double gpa = scanner.nextDouble(); // nextDouble()은 실수 입력
// 입력 값 출력
System.out.println("Name: " + name);
System.out.println("Age: " + age);
System.out.println("GPA: " + gpa);
// Scanner 객체 닫기
scanner.close();
}
}
출력 예시:
Enter your name: John
Enter your age: 25
Enter your GPA: 3.85
Name: John
Age: 25
GPA: 3.85
주요 메서드
Scanner
클래스는 다양한 메서드를 제공하여 입력된 데이터를 처리할 수 있습니다. 주요 메서드는 다음과 같습니다:
메서드 | 설명 |
---|---|
nextLine() |
한 줄의 문자열을 입력받습니다. |
next() |
공백을 기준으로 한 단어를 입력받습니다. |
nextInt() |
정수를 입력받습니다. |
nextDouble() |
실수를 입력받습니다. |
nextBoolean() |
true 또는 false 값을 입력받습니다. |
nextLong() |
긴 정수를 입력받습니다. |
hasNext() |
입력 스트림에 입력이 있는지 확인합니다. |
주의사항
- 버퍼 문제:
nextInt()
와nextLine()
을 함께 사용할 때 주의해야 합니다.nextInt()
는 정수만 읽고 입력 버퍼에 남아있는 개행 문자를 제거하지 않기 때문에, 그 다음nextLine()
호출 시 빈 줄을 읽는 문제가 발생할 수 있습니다. 이 문제를 해결하려면nextLine()
을 한 번 더 호출하여 개행 문자를 처리해야 합니다.
버퍼 문제 해결 예제
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter your age: ");
int age = scanner.nextInt();
scanner.nextLine(); // 개행 문자를 처리하기 위해 한 번 더 호출
System.out.print("Enter your name: ");
String name = scanner.nextLine();
System.out.println("Name: " + name + ", Age: " + age);
scanner.close();
}
}
2. BufferedReader
사용
- *
BufferedReader
*는Scanner
보다 빠른 입력을 처리할 수 있으며, 특히 대용량 데이터를 처리할 때 유용합니다. 다만, 입력을 처리할 때 예외 처리가 필요하며, 주로 문자열 입력에 적합합니다.
BufferedReader
사용 예제
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
// BufferedReader 객체 생성
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
// 문자열 입력 받기
System.out.print("Enter your name: ");
String name = reader.readLine(); // readLine()은 한 줄의 문자열을 입력받습니다.
// 정수 입력 받기 (문자열로 받은 후 변환)
System.out.print("Enter your age: ");
int age = Integer.parseInt(reader.readLine());
// 입력 값 출력
System.out.println("Name: " + name);
System.out.println("Age: " + age);
}
}
출력 예시:
Enter your name: Alice
Enter your age: 30
Name: Alice
Age: 30
주요 메서드
메서드 | 설명 |
---|---|
readLine() |
한 줄의 입력을 읽어 문자열로 반환합니다. |
BufferedReader
는 입력을 받을 때마다 데이터를 문자열로 반환하기 때문에, 다른 데이터 타입으로 변환하려면 해당 문자열을 수동으로 변환해야 합니다
(Integer.parseInt()
, Double.parseDouble()
등).
장점
- 빠른 입력 처리:
BufferedReader
는 버퍼를 사용하기 때문에 대용량 데이터를 처리할 때Scanner
보다 빠릅니다.
단점
- 타입 변환 필요: 모든 입력을 문자열로 받아서 필요한 타입으로 변환해야 합니다.
- 예외 처리 필요:
IOException
을 처리해야 합니다.
3. Console
클래스 사용
Console
클래스는 콘솔 애플리케이션에서 사용하기 적합하며, 비밀번호 입력 등 보안이 필요한 입력을 처리할 때 유용합니다.
Console
클래스는 System.console()
을 통해 콘솔 객체를 가져오며, 표준 입력이 콘솔을 통한 것이 아닐 경우 null
을
반환합니다.
Console
클래스 사용 예제
public class Main {
public static void main(String[] args) {
// Console 객체 생성
java.io.Console console = System.console();
if (console != null) {
// 문자열 입력 받기
String name = console.readLine("Enter your name: ");
// 비밀번호 입력 받기
char[] password = console.readPassword("Enter your password: ");
// 입력 값 출력 (비밀번호는 보안 때문에 출력하지 않음)
System.out.println("Name: " + name);
} else {
System.out.println("No console available");
}
}
}
출력 예시:
Enter your name: Bob
Enter your password: *****
Name: Bob
주요 메서드
메서드 | 설명 |
---|---|
readLine() |
한 줄의 문자열을 입력받습니다. |
readPassword() |
보안 문자열을 입력받으며, 입력 내용이 콘솔에 표시되지 않습니다. |
장점
- 보안 입력:
readPassword()
메서드를 사용하면 비밀번호와 같은 보안 민감한 데이터를 입력받을 수 있으며, 입력 내용이 화면에 표시되지 않습니다.
단점
- GUI 환경에서는 사용할 수 없음:
Console
객체는 콘솔에서 실행되는 경우에만 사용할 수 있으며, IDE에서 실행할 경우null
을 반환할 수 있습니다.
요약
자바에서 사용자 입력을 처리하는 방법은 다양합니다. 각 방법은 입력의 용도와 처리할 데이터의 양에 따라 적절히 선택할 수 있습니다.
1. Scanner
클래스
- 장점: 사용법이 간단하고, 다양한 데이터 타입의 입력을 쉽게 처리할 수 있습니다.
- 단점: 대용량 데이터 처리 시 느릴 수 있습니다.
2. BufferedReader
- 장점: 빠른 입력 처리에 적합하며, 대용량 데이터를 처리할 때 유리합니다.
- 단점: 문자열로 입력받기 때문에 추가적인 타입 변환이 필요하며, 예외 처리가 필요합니다.
3. Console
클래스
- 장점: 보안이 필요한 입력(비밀번호 등)에 적합하며, 콘솔에서만 실행됩니다.
- 단점: IDE에서 사용하기 어렵고, 콘솔 환경에서만 사용할 수 있습니다.
일반적인 프로그램에서는 Scanner
클래스가 가장 많이 사용되며, 대용량 데이터를 다루거나 성능이 중요한 경우
**BufferedReader
**를 사용할 수 있습니다. 보안이 중요한 입력이 필요할 경우에는 Console
클래스를 사용할 수
있습니다.