자바에서 사용자로부터 키보드 입력을 받을 때는
Scanner클래스를 가장 많이 사용한다.
System.in을 활용해서 다양한 타입의 값을 간단하게 입력받을 수 있다.
Scanner scanner = new Scanner(System.in);
System.in : 표준 입력 (키보드)new Scanner(...) : 입력 도구 생성| 메서드 | 설명 | 입력 예시 | 결과 값 | 결과 타입 |
|---|---|---|---|---|
nextLine() | 한 줄 전체 입력 | hello world | hello world | String |
next() | 단어 하나 (공백 기준) | hello world | hello | String |
nextInt() | 정수 입력 | 10 | 10 | int |
nextDouble() | 실수 입력 | 3.14 | 3.14 | double |
nextBoolean() | true / false 입력 | true | true | boolean |
Scanner scanner = new Scanner(System.in);
System.out.print("이름을 입력하세요: ");
String name = scanner.nextLine();
System.out.println("안녕하세요, " + name + "님!");
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()으로 버퍼를 비워줘야 한다!