서비스 기획자의 성장기록

[Java] 04. Scanner 클래스와 next() 메소드 본문

Java

[Java] 04. Scanner 클래스와 next() 메소드

Jenny Noh 2024. 1. 16. 12:45

  Scanner 클래스

키보드로 입력한 값을 받아 사용하기 위해서 Scanner 클래스를 사용한다.

Scanner은 먼저 클래스 밖에서 import java.util.Scanner로 클래스를 import 하고 사용할 수 있다.

Scanner 객체를 생성해 주고 입력받은 값을 'keyin'이라는 변수에 저장한다.

값을 입력 받을 때는 keyin.nextLine(), keyin.nextDouble(), keyin.nextInt() 메소드를 사용할 수 있다.

- keyin.nextLine(): 문자열을 전달받음

- keyin.nextDouble(): 실수형을 전달받음

- keyin.nextInt(): 정수형을 전달받음

출처: Meenzino.log

 

keyin = new Scanner(System.in)을 선언할 때, 키보드 입력에 대해 추상화된 메모리공간이 메모리에 올라가게 되는데

이 때 keyin.close() 작업을 해주지 않으면 아래처럼 'Resource leak' warning 메세지가 뜨게 된다.

 

main 메서드가 종료되면 키보드 입력에 대한 메모리도 사라지긴 하지만 그냥 '메모리가 낭비되고 있어요!!🚨' 라고 알려주는 것이다.

 

 

  next() 와 nextLine()의 차이

next()와 nextLine()은 둘 다 문자열을 입력받아 리턴한다. 

이 둘의 차이점은 next()는 토큰을 공백(띄어쓰기, 엔터, 탭)을 기준으로 구분하고 nextLint()은 엔터를 기준으로 토큰을 구분한다는 차이점이 있다. 

 

1) next()로 입력받았을 때:

 

2) nextLine()으로 입력받았을 때:

 

이 때, next()는 개행문자(엔터)를 무시하고 입력 데이터를 가져오고, nextLine()은 개행문자를 포함하여 데이터를 가져온다. 

위의 예에서 'input1' + 엔터 를 입력하게되면 buffer에 'input1\n'으로 데이터가 올라가게 된다.

이때, next() 메소드에 의해 'input1'이 불러와지고, buffer 에는 개행문자인 '\n'만 남는다. 

그리고 남아있는 '\n'을 nextLine()이 가져와서, 콘솔에서는 공백처럼 표기되고 코드가 종료된다. 

 

* Tip! 

nextLine()은 buffer에 남아있는 데이터를 모두 불러오기 때문에, buffer을 초기화 하고자 한다면 keyin.nextLine();을 사용한다.