[Java] Scanner

손주현·2025년 4월 4일

Java 기초

목록 보기
9/13
post-thumbnail

자바에서 사용자로부터 키보드 입력을 받을 때는 Scanner 클래스를 가장 많이 사용한다.
System.in을 활용해서 다양한 타입의 값을 간단하게 입력받을 수 있다.

Scanner 사용 기본 구조

Scanner scanner = new Scanner(System.in);
  • System.in : 표준 입력 (키보드)
  • new Scanner(...) : 입력 도구 생성

Scanner 주요 메서드 정리

메서드설명입력 예시결과 값결과 타입
nextLine()한 줄 전체 입력hello worldhello worldString
next()단어 하나 (공백 기준)hello worldhelloString
nextInt()정수 입력1010int
nextDouble()실수 입력3.143.14double
nextBoolean()true / false 입력truetrueboolean
  • 입력예제
Scanner scanner = new Scanner(System.in);
System.out.print("이름을 입력하세요: ");
String name = scanner.nextLine();
System.out.println("안녕하세요, " + name + "님!");

Scanner 사용 시 주의점

  • nextInt() 등 숫자 입력 후 nextLine()을 바로 쓰면 버퍼 문제로 줄바꿈이 넘어감
int age = scanner.nextInt();
String name = scanner.nextLine(); // ← 여기서 빈 문자열이 들어올 수 있음

→ 해결법: nextLine()을 한 번 더 써서 줄바꿈 제거

  • Scanner는 보통 프로그램 끝나기 전에 닫지 않아도 큰 문제는 없지만, 자바에서는 리소스 정리를 위해 scanner.close();를 호출하는 습관이 좋음

예시

Scanner scanner = new Scanner(System.in);

System.out.print("나이를 입력하세요: ");
int age = scanner.nextInt();  // 여기서 숫자 입력

System.out.print("이름을 입력하세요: ");
String name = scanner.nextLine();  // 이름 입력?
System.out.println("입력된 이름: " + name);

실행

  • 입력
나이를 입력하세요: 20
이름을 입력하세요: 
  • 결과
입력된 이름: 

사용자 입장에서는 분명 숫자 20을 입력하고 엔터를 쳤는데,
다음 nextLine()에서 입력을 건너뛰고 바로 빈 문자열("")이 들어가 버린다.

왜 이런 일이 발생할까?

  • nextInt()는 숫자만 읽고, 사용자가 누른 엔터(줄바꿈 문자 \n)는 버퍼에 남겨둔다.
  • 이후 nextLine()이 호출되면, 그 남아 있던 \n만 읽고 끝난다.
  • 결과적으로 입력 없이 넘어간 것처럼 보이는 것이다.

해결 방법

  • 숫자 입력 후 버퍼를 비워주는 nextLine()을 한 번 더 호출하면 된다.
Scanner scanner = new Scanner(System.in);

System.out.print("나이를 입력하세요: ");
int age = scanner.nextInt();
scanner.nextLine();  // ★ 여기서 엔터 제거!

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

System.out.println("입력된 이름: " + name);

정수나 실수 입력 후 문자열 입력이 바로 이어진다면, 반드시 nextLine()으로 버퍼를 비워줘야 한다!

profile
Clarinetist.dev

0개의 댓글