╱╱╭╮╱╱╱╱╱╱╭━━━╮╱╱╱╭╮╱╭╮╱╱╱╱╱╱ ╱╱┃┃╱╱╱╱╱╱┃╭━╮┃╱╱╱┃┃╱┃┃╱╱╱╱╱╱ ╱╱┃┣━━┳━━╮┃┃╱┃┣━╮╱┃╰━╯┣━━┳━╮╱ ╭╮┃┃╭╮┃┃━┫┃╰━╯┃╭╮╮┃╭━╮┃╭╮┃╭╮╮ ┃╰╯┃╭╮┃┃━┫┃╭━╮┃┃┃┃┃┃╱┃┃╭╮┃┃┃┃ ╰━━┻╯╰┻━━╯╰╯╱╰┻╯╰╯╰╯╱╰┻╯╰┻╯╰╯

Java/Java 기초

[Java] 사용자 입력 (Scanner)

재안안 2022. 3. 29. 05:03

키보드에서 프로그램으로 데이터를 입력하는 방법은 Scanner를 사용하는 방법이다.

이때 키보드를 통해 데이터를 버퍼가 받아들이고 버퍼를 거쳐서 프로그램으로 전달된다.

Scanner를 통해 전달되는 모든 데이터는 문자열에 해당한다.

 

  • Scanner 사용법
  • Scanner 메소드

 

Scanner 사용법

1. import

2. new

 

우선 Scanner를 사용하려면 Scanner Class를 불러와야한다.

 

import java.util.Scanner;

 

Scanner Class를 불러혼 후 객체를 만들어줘야한다.

 

객체는 아래와 같다.

 

Scanner sc = new Scanner(System.in);

 

sc라는 이름의 Scanner 객체에 new 메소드를 사용해 Scanner를 할당하고 키보드로부터

데이터를 입력받는다.

 

이제 Scanner 사용 준비는 끝났다.

이제 Scanner를 사용해 키보드로부터 정수를 입력받아 변수에 저장하겠다.

 

코드는 아래와 같다.

 

Scanner 사용 예제
실행 결과

 

위의 사진을 통해 알 수 있는건 sc객체를 통해 a에게 값을 전달했다는 것이다.그런데 sc는 Scanner Class인데 a는 int형 임으로 자료형이 다르다.

이는 Scanner Class의 메소드로 형변환을 거쳐 원하는 데이터를 맞는 자료형에 저장한 것이다.

 

 

Scanner 메소드

 

Scanner Class내에는 정말 정말 많은 메소드들이 있다.

그중 키보드에서의 데이터 전달시 사용하는 대표적인 메소드는 아래와 같다.

 

nextLine() 한 줄을 읽고 \n제외 후 문자열 반환
next() string 타입으로 반환
nextInt() int 타입로 반환
nextLong() long int 타입으로 리턴
nextFloat() float 타입으로 리턴
nextDouble() double 타입으로 리턴

 

메소드 사용법은 아래와 같다.

 

Scanner method 사용 예제
실행 결과

 

이 외에도 다른 여러가지 자료형에 대한 next~()도 존재한다.

 

여기서 주의할 점은 next~()와 nextLine()의 차이점이다.

 

콘솔창에서 입력은 엔터(\n)도 포함이 된다.

 

next() 메소드는 공백을 기준으로 데이터를 입력받는다.

여기서 엔터는 공백이 아닌 개행문자로 취급된다.

물론 아무런 데이터 없이 개행문자만 버퍼로 들어온다면 next()는 값으로 인식 하지 않는다.

 

아래는 String hi = sc.next(); 실행시 버퍼를 시각화한 것이다.

hihi\n

 

변수에는 공백전까지의 데이터가 전달된다. (hihi)

이때 버퍼에는 "\n"가 남는다.

\n

 

전달 후 남은 데이터는 버퍼에서 새로 입력된 값으로 취급을 받는다.

\n

 

그런데 이때 nextLine()은 \n을 기준으로 데이터를 입력받는다.

 

개행문자가 입력될 때 까지 데이터를 입력받는데

만약 위와같이 버퍼에 개행문자가 남아있다면

next()와는 달리 nextline()는 개행문자 까지 입력받으니까 공백이 입력된다. 

 

 

그래서 위의 코드에서는 ji가 nextLine()으로 입력을 받기전 남은 개행문자 제거를 했던 것이다.

 

제거 후 입력

hi ji\n

 

만약 남은 개행문자를 제거하지 않고 입력한다면 버퍼는 아래와 같이 인식한다.

\nhi ji\n