[Java] Scanner 란

Java Scanner 클래스

 

 

1)  Scanner란?

Java에서 사용자 입력을 받을 때 사용하는 클래스입니다.
주로 키보드 입력(System.in)을 처리할 때 많이 사용되며, 파일이나 문자열 등 다양한 소스로부터 입력을 받을 수 있습니다.
java.util 패키지에 포함되어 있으며, 사용하려면 반드시 import 해야 합니다.

( import java.util.Scanner )

 

 

예시: 기본 선언

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);  // System.in = 키보드 입력
        System.out.print("이름을 입력하세요: ");
        String name = scanner.nextLine();
        System.out.println("안녕하세요, " + name + "님!");
    }
}

 

 

 

2)  주요 메서드 정리

메서드 설명
nextLine() 입력된 한 줄 전체(String)를 읽습니다.
next() 공백 이전까지의 문자열 한 단어를 읽습니다.
nextInt() 정수(int)를 입력받습니다.
nextDouble() 실수(double)를 입력받습니다.
hasNext() 다음 입력이 존재하는지 여부를 반환합니다.

 

 

 

 

3)  Scanner 사용 시 주의점

  • nextLine()과 nextInt() 혼용 주
    nextInt() 사용 후 nextLine()을 바로 쓰면 개행 문자 때문에 오작동할 수 있습니다.
    이를 방지하려면 scanner.nextLine()을 한 번 더 호출해 개행문자를 제거해야합니다.
    * 개행문자 : 줄을 바꾸기위한 문자 (ex. \n)
  • 입력 닫기: scanner.close()를 통해 자원을 닫아야 합니다. 단, System.in은 한 번 닫으면 다시 열 수 없습니다.

 

 

 

예시: nextLine() 주의사항

Scanner sc = new Scanner(System.in);

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

sc.nextLine(); // 개행 제거용

System.out.print("이름을 입력하세요: ");
String name = sc.nextLine();

 

 

 

 

4) 다양한 Scanner 입력 예제

// 문자열 입력
String input = scanner.nextLine();

// 정수 입력
int number = scanner.nextInt();

// 실수 입력
double price = scanner.nextDouble();

// 띄어쓰기 기준 단어 읽기
String word = scanner.next();

// while 문을 사용한 연속 입력
while(scanner.hasNext()) {
  System.out.println(scanner.next());
}

 

 

 

 

5)  요약

  • Scanner는 Java에서 입력을 받을 수 있는 도구입니다.
  • 문자열, 숫자, 실수 등 다양한 데이터 타입을 입력받을 수 있으며, 파일, 문자열 등 다양한 소스에 대응 가능합니다.
  • nextInt()와 nextLine() 혼용 시 개행 처리를 주의해야합니다.
  • 사용 후에는 scanner.close()를 통해 자원을 정리하는 습관을 가지세요.



    * scanner를 close하지 않은경우
    1. 메모리 누수
    1) Scanner 객체가 계속 메모리를 점유함.
    2)  반복적으로 생성되면 가비지 컬렉터가 정리하기 전까지 리소스를 차지

    2. 리소스 누수 경고
    1) IntelliJ, Eclipse, VSCode 같은 툴은 close()를 하지 않으면 경고를 띄움
    2) 특히 파일 스캐너 (new Scanner(new File("text.txt")))의 경우는 더 중요함.