본문 바로가기
> 개발/JAVA

자바 Scanner

by @일리 2023. 7. 30.

C언어와 자바를 배우면서 신기했던 것 중 하나가 바로 Scanner 기능이다. 사용자에게서 입력을 받는 기능이 자바스크립트에는 없었기에 컴퓨터와 상호작용하는 느낌을 제대로 느끼게 해준 이 기능이 참신했다! 

(window.prompt() 메서드나 Node.js의 readline 모듈은 순수 자바스크립트는 아니니깐 예외)

Scanner

import java.util.Scanner;

public class ScannerTest {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        System.out.print("숫자를 입력하세요. :");
        int num = scan.nextInt();
        System.out.println("입력된 숫자 = " + num);

        System.out.print("실수를 입력하세요. :");
        float num2 = scan.nextFloat();
        System.out.println("입력된 실수 = " + num2);

        System.out.print("문자열을 입력하세요. :");
        String str = scan.next();
        System.out.println("str = " + str);

        scan.nextLine(); 
        System.out.print("문자열을 입력하세요. :");
        String str2 = scan.nextLine();
        System.out.println("str2 = " + str2);
    }
}

 

컴퓨터랑 티키타카가 되게 해주는 기능은 import java.util.Scanner를 해야 사용할 수 있다. 

 

scan.next()와 scan.nextLine()의 차이점은 next()는 공백 전까지만 값을 저장하고, nextLine()은 공백까지 저장한다는 점이다.

scan.next()에서 "메롱 메롱" 을 입력해도 공백 전인 "메롱"까지만 저장이 된다.

 

scan.nextLine()을 사용할 때 주의해야 할 점사용하기 전에 scan.nextLine()을 입력해줘야 한다는 점이다. 

 

import java.util.Scanner;

public class ScannerTest {

    public static void main(String[] args) {
    
        Scanner scan = new Scanner(System.in);
        System.out.print("문자열을 입력하세요. :"); //"여러분 안녕하세요"를 입력 후 엔터
        String str = scan.next();
        System.out.println("next = " + str);

        System.out.print("문자열을 입력하세요. :"); // 입력 스트림에 남아있는 " 안녕하세요"를 인식
        String str2 = scan.nextLine();
        System.out.println("nextLine = " + str2);
        
        scan.close();

        }
    }

자바에서는 공백과 탭으로 데이터를 구분한다. 그래서 "여러분 안녕하세요"를 입력했을 때 scan.next() 매서드를 사용하면 "여러분"까지만 str에 저장이 된다. 그리고 입력 스트림에 남아있는 " 안녕하세요"는 바로 str2에 저장이 된다. 이를 방지하기 위해서 scan.nextLine()를 사용하기 전에 scan.nextLine()으로 입력 스트림을 초기화해줘야 한다. 마치 내가 메모리 관리를 해주는 가비지 콜렉터의 역할을 하는 것 같다ㅋㅋ입력 스트림을 청소해주는 가비지 콜렉터!

한 번에 여러 값을 입력할 수는 없을까?
import java.util.Scanner;

public class ScannerTest2 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.print("숫자를 3개 입력해주세요.: ");
        int num1 = scan.nextInt();
        int num2 = scan.nextInt();
        int num3 = scan.nextInt();
        System.out.println("num1 = " + num1);
        System.out.println("num2 = " + num2);
        System.out.println("num3 = " + num3);
    }
}

 

여러 데이터가 한 번에 입력이 되면 공백이나 탭으로 구분해서 데이터를 저장한다.

 

 

앞으로 이 Scanner 기능을 어떻게 활용할지 기대가 된당~!!

댓글