코딩 스쿨 Java

언어선택 : HTMLCSSJAVAJAVASCRIPTMYSQLSQL PHP

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 클래스를 사용할 수 있습니다.


copyright ⓒ 스타트코딩 all rights reserved.
이메일 : startcodingim@gamil.com