본문 바로가기
Java_language

Scanner 입력받기

by 헬로제이콥 2025. 11. 12.

 

🔑 Scanner: 컴퓨터에게 말해주는 창문 

안녕! Scanner (스캐너)는 컴퓨터에게 **"사용자(너)에게서 정보를 받아와!"**라고 명령하는 도구예요.

Scanner는 마치 컴퓨터와 우리 사이에 있는 창문 같아요. 우리가 키보드⌨️로 글자나 숫자를 입력하면, Scanner가 이 창문을 통해 그 정보를 읽어서 프로그램에게 전달해 주는 거죠.


💡 Scanner는 언제 쓰나요?

Scanner는 프로그램이 실행되는 도중에 사용자(너)의 입력이 필요할 때 언제든지 사용해요.

가장 쉽게 말하면, 컴퓨터가 우리에게 질문을 하고 우리가 키보드로 대답해야 할 때 쓰는 거예요!

상황 예시
이름 물어보기 "네 이름은 뭐니?" → (내가 키보드로 이름 입력)
계산할 숫자 받기 "첫 번째 숫자를 입력하세요." → (내가 숫자 입력)
게임에서 선택 받기 "가위, 바위, 보 중 하나를 입력하세요." → (내가 선택 입력)

📝 Scanner 사용 예제: 이름과 나이 입력받기

자바에서 Scanner가 어떻게 작동하는지 쉽게 알아볼게요. 마치 컴퓨터가 우리에게 자기소개를 시키는 것과 같아요!

1. Scanner를 준비해요 (도구 상자를 꺼내는 것처럼)

Java
 
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()으로 읽어와서 저장해요.

Java
 
        System.out.print("네 이름은 뭐니? "); 
        // 화면에 질문을 보여줘
        
        String name = scan.nextLine(); 
        // 사용자가 키보드로 친 "글자 전체"를 읽어서 name에 저장해

3. 나이 입력받기 (숫자 읽기)

이번엔 질문을 하고, 우리가 입력한 숫자를 scan.nextInt()로 읽어와서 저장해요.

Java
 
        System.out.print("나이는 몇 살이니? "); 
        // 화면에 질문을 보여줘
        
        int age = scan.nextInt(); 
        // 사용자가 키보드로 친 "정수(숫자)"를 읽어서 age에 저장해

4. 결과 보여주기

입력받은 정보를 사용해서 화면에 인사를 합니다.

Java
 
        System.out.println("안녕, " + name + "!"); 
        System.out.println("너는 " + age + "살이구나. 만나서 반가워!");
        
        scan.close(); // 다 썼으니 Scanner 도구를 닫아줘.

💻 전체 코드와 실행 결과

📝 문자열(String) 입력받기: next() vs nextLine()

1. next() 메서드 (공백 전까지 한 단어 입력)

next() 메서드는 공백 문자(Space, Tab, Enter 등)를 만나기 전까지의 문자열(String)을 읽어옵니다. 즉, 한 단어만 입력받을 때 유용합니다.

Java
 
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 키를 누를 때까지 입력 버퍼의 한 줄 전체를 읽어옵니다. 공백을 포함한 문장이나 주소 등을 입력받을 때 사용합니다.

Java
 
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에는 단일 문자를 직접 읽는 메서드는 없으므로, 문자열로 입력받은 후 첫 번째 문자만 추출하는 방식으로 사용합니다.

Java
 
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()은 버퍼에 남아있던 그 잔여 엔터 문자를 바로 읽어버리고 사용자 입력을 기다리지 않고 건너뛰게 됩니다(버퍼 비우기).

예시 코드:

Java
 
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() 뒤에 추가해야 함