지금까지의 한계: 사용자 입력이 없었다
이전까지 작성한 프로그램들은 모두 코드 안에 값이 고정되어 있었다.
즉, 프로그램이 실행되기 전에 모든 값이 이미 정해져 있었고, 사용자가 개입할 여지가 없었다.
하지만 실제 프로그램은 다르다.
- 사용자가 숫자를 입력한다
- 사용자가 문자열을 입력한다
- 입력값에 따라 결과가 달라진다
이처럼 사용자의 입력을 받아 처리하는 기능은 현실적인 프로그램을 만들기 위한 필수 요소이다.
이를 위해 자바에서 제공하는 도구가 바로 Scanner이다.
System.in과 Scanner
출력을 할 때는 `System.out`을 사용했다.
입력을 받을 때는 `System.in`을 사용한다.
다만 `System.in`은 입력을 직접 처리하기에는 구조가 복잡하고 사용하기 어렵다.
이 문제를 해결하기 위해 자바는 `Scanner 클래스`를 제공한다.
`Scanner`는 `System.in`을 감싸서,
사용자가 입력한 값을 타입별로 쉽게 읽을 수 있도록 도와주는 클래스이다.
Scanner 기본 사용법
다음은 `Scanner`를 사용해 문자열, 정수, 실수를 입력받는 예제이다.
package scanner;
import java.util.Scanner;
public class Scanner1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("문자열을 입력하세요:");
String str = scanner.nextLine();
System.out.println("입력한 문자열: " + str);
System.out.print("정수를 입력하세요:");
int intValue = scanner.nextInt();
System.out.println("입력한 정수: " + intValue);
System.out.print("실수를 입력하세요:");
double doubleValue = scanner.nextDouble();
System.out.println("입력한 실수: " + doubleValue);
}
}
Scanner 객체 생성
Scanner scanner = new Scanner(System.in);
이 코드는 `Scanner 객체`를 생성하는 코드이다.
지금 단계에서는 다음 정도로 이해하면 충분하다.
- `Scanner`는 사용자 입력을 처리하는 도구이다
- `System.in`을 기반으로 입력을 읽는다
- scanner라는 변수를 통해 `Scanner`기능을 사용한다
객체와 클래스의 개념은 이후에 더 자세히 다룬다.
Scanner 주요 메서드
`Scanner`는 입력값을 타입에 맞게 읽어오는 메서드를 제공한다.
- `scanner.nextLine()`
→ 엔터(\n)를 누를 때까지 입력한 내용을 문자열로 가져온다 - `scanner.nextInt()`
→ 입력값을 정수(int)로 가져온다 - `scanner.nextDouble()`
→ 입력값을 실수(double)로 가져온다
입력한 값의 타입과 메서드가 일치해야 정상 동작한다.
실행 결과 예시
정상 입력의 경우 다음과 같이 동작한다.
문자열을 입력하세요:hello
입력한 문자열: hello
정수를 입력하세요:10
입력한 정수: 10
실수를 입력하세요:1.5
입력한 실수: 1.5
주의: 타입이 다르면 오류가 발생한다
`Scanner`는 입력값을 지정한 타입으로 변환하려고 시도한다.
이때 입력값이 타입과 맞지 않으면 예외가 발생한다.
예를 들어 정수를 입력해야 하는 상황에서 문자를 입력하면 다음과 같은 오류가 발생한다.
Exception in thread "main" java.util.InputMismatchException
이는 Scanner가 "백만원"이라는 문자열을 int로 바꿀 수 없기 때문이다.
따라서 입력받는 타입과 입력값의 형태는 반드시 일치해야 한다.
print()와 println()의 차이
예제에서는 `println()` 대신 `print()`를 사용했다.
System.out.print("문자열을 입력하세요:");
이유는 출력 후 같은 줄에서 입력을 받기 위함이다.
print()
- 출력 후 줄바꿈을 하지 않는다
System.out.print("hello");
System.out.print("world");
// 결과: helloworld
println()
- 출력 후 줄바꿈(\n)을 추가한다
System.out.println("hello");
System.out.println("world");
// 결과:
hello world
줄바꿈 문자(\n)
사용자가 엔터 키를 누르면 \n이라는 줄바꿈 문자가 입력된다.
이를 `new line character` 또는 개행 문자라고 한다.
`println()`은 내부적으로 `print()` 뒤에 `\n`을 추가한 것과 같다.
System.out.print("hello\n");
System.out.print("world\n");
이 코드는 `println()`과 동일하게 동작한다.
정리
- 사용자 입력을 받기 위해 Scanner를 사용한다
- Scanner는 System.in을 기반으로 동작한다
- 입력 타입에 맞는 메서드를 사용해야 한다
- 타입이 맞지 않으면 InputMismatchException이 발생한다
- print()와 println()의 차이는 줄바꿈 여부이다
'김영한 > 자바 입문' 카테고리의 다른 글
| 향상된 for문(for-each) (0) | 2026.02.10 |
|---|---|
| 배열의 선언과 생성 (0) | 2026.02.09 |
| 형변환과 오버플로우 (0) | 2026.02.09 |
| 스코프 (0) | 2026.02.09 |
| 변수 선언과 초기화 (0) | 2026.02.08 |