역할
- 화면으로부터 데이터를 입력받고, 사용자가 원하는 데이터 타입으로 변환해준다.
- 데이터 타입을 클래스 내부에서 알아서 변환해주기때문에 편의성은 뛰어나지만, 많은 타입변환 함수들을 가지고있어 속도가 매우 느리다
파해쳐보기
Scanner 클래스를 사용하기 위해서는 import문을 먼저 선언해주어야한다.
import java.util.Scanner
그런 뒤, 객체를 생성해주면 Scanner를 사용할 수 있는 조건을 갖추게 된다.
Scanner sc = new Scanner(System.in)
여기서 System.in이란
자바의 표준입출력을 위한 세 가지 입출력 스트림 (System.in, System.out, System.err)중 하나로 System.in은 콘솔로부터 데이터를 입력받는 스트림입니다.
System.in으로 콘솔로부터 입력받은 데이터를 Scanner클래스에 넘겨주기위해 사용됩니다.
Scanner클래스의 메서드를 사용해보기전에 Buffer라는 개념에 대해 가볍게 정의만 하고가자면
Buffer는 어떤 데이터가 전송될 때 일시적으로 저장되는 메모리영역이라고 생각하시면 됩니다.
Scanner클래스 메서드 사용
Scanner메서드의 종류
- nextBoolean() - boolean을 읽은 후 반환
- nextByte() - byte를 읽은 후 반환
- nextShort() - short를 읽은 후 반환
- nextLong() - long을 읽은 후 반환
- nextFloat() - float를 읽은 후 반환
- nextDouble() - double을 읽은 후 반환
- nextInt() - int를 읽은 후 반환
- next() - 공백을 기준으로 한 단어만 읽은 후 반환
- nextLine() - 개행을 기준으로 한 줄을 읽은 후 반환
Scanner클래스를 사용할 때, 몇 가지 주의해야할 점이 있습니다.
첫번째로는 next()와 nextLine()의 차이입니다.
next()메서드는 공백을 기준으로 한 단어만 읽어 반환합니다.
nextLine() 메서드는 개행(엔터)을 기준으로 한 줄을 읽어 반환합니다.
예를 들어 설명해보자면
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String a = sc.next();
String b = sc.nextLine();
System.out.println(a);
System.out.println(b);
System.out.println("**");
}
}
입력값 //abc
위와 같이 코드를 작성할 경우,
Scanner로 입력받은 값은 버퍼를 거쳐가는데, abc를 입력한 뒤에 엔터를 치면 버퍼의 상태는 아래와 같습니다.
abc\n |
그리고나서 위에서 설명했다싶이 next()메서드는 공백을 기준으로 읽어오기때문에 abc를 반환해 변수 a에 저장합니다.
이 때 버퍼의 상태는 아래와 같이 \n(개행)이 남아있는 상태입니다.
\n |
그렇게 되면 nextLine()메서드는 개행을 기준으로 값을 읽어 반환하기때문에 b에는 \n이 저장됩니다.
증명하기 위해 위의 코드를 출력하면
abc와 ex사이에 공백으로 개행되어있는 것을 확인할 수 있습니다.
눈치빠르신 분들은 Scanner 메서드의 종류를 볼 때 눈치채셨겠지만
Scanner는 유일하게 char타입의 반환 메서드를 지원하지 않습니다.
만약 Scanner클래스를 사용하여 char타입 데이터를 입력받고 싶다면
char c = sc.next().charAt(0);
char ch = sc.nextLine().charAt(0);
와 같이 charAt메서드를 사용하여 String타입을 char타입으로 변환시켜야합니다.
'Language > Java' 카테고리의 다른 글
[JAVA] 다형성 (0) | 2024.06.02 |
---|---|
[Java] - 배열(Array) (0) | 2023.10.23 |
[Java] - BufferedWriter (0) | 2023.10.18 |
[Java] - BufferedReader (0) | 2023.10.18 |
연산자와 타입의 범위 (0) | 2023.08.06 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!