반응형

Java

 

안녕하세요. 후니입니다!

이번 포스팅에서는 Scanner 클래스를 사용하여 입력 받는 방법에 대해 알아보겠습니다.

우선 C언어를 해보신 분들이라면 scanf()함수와 같은 기능이고 코딩이 처음이신 분은 편하게 읽고 따라 해 보세요 :)

 

Scanner 클래스의 특징

1. Scanner 클래스란 화면으로부터 데이터를 입력받는 기능을 제공하는 클래스입니다. 카톡에서 메세지를 입력 후 전송 버튼을 누르면 상대방에게 메세지가 전송되듯 메세지 대신 값을 입력받는 기능입니다.

 

2. java.util 패키지 내에 존재하는 클래스입니다. 정수(int)와 실수(double)등의 기본적인 데이터 타입 입력을 받기 위한 클래스입니다.

 

Scanner 클래스 사용 방법

 

1. import문 추가하기

 

1
2
import java.util.Scanner;
//import java.util.*;

 

 - 위의 Scanner 클래스 특징 두 번째처럼 java.util 패키지 안에 속해있는 클래스이므로 import를 해주어야 합니다. 그리고 주석 처리한 두 번째 코드에서의 *(Asterisk)는 java.util패키지 안에 있는 모든 클래스들을 import하겠다는 의미입니다. 첫 번째 줄처럼 코드를 작성하면 나중에 java.util패키지에 속해있는 클래스를 사용할 때 import를 또 해야 하는 번거로움도 있고 속도면에서도 차이가 거의 없으므로 저는 두 번째 코드처럼 한 번에 import를 하는 편입니다.

 

2. Scanner 클래스 객체 생성

 

1
Scanner sc = new Scanner(System.in);

 

- 클래스도 객체를 생성해야만 기능을 사용할 수 있는 것이 있고 생성하지 않아도 되는 클래스가 있습니다. println() 메소드와 같은 것은 객체를 생성하지 않고 사용 가능하지만 Scanner클래스는 꼭 객체를 생성해야만 사용할 수 있습니다.

 

 

 - System.in은 화면에서 입력을 받겠다는 의미입니다. Scanner클래스는 화면 뿐만 아니라 파일로부터 입력을 받을 수 있는데 화면으로부터 정수형, 소수형과 같은 데이터 타입을 입력을 받을 것이기 때문에 System.in을 사용합니다.

 

 - System.in은 입력한 값을 Byte 단위로 읽으며 키보드와 연결된 자바의 표준 입력 스트림입니다.

 

3. Scanner 객체 사용

 

1
int iValue = sc.nextInt(); // 입력받은 정수를 변수 iValue에 저장
 

 

 - 만약 입력받는 데이터 타입이 정수가 아니라 실수형일 경우에는 nextDouble()처럼 사용하면 됩니다.

 

4. 이름과 나이를 입력받아서 출력하는 예제입니다. 이름은 문자열이므로 nextLine()을 사용합니다. next()를 사용할 수 있는데 둘의 차이점은 next()는 공백 단위로 입력을 받고 nextLine()은 Enter 단위로 입력을 받는다는 차이가 있습니다.

next()를 사용해서 a b를 입력한다면 a만 저장이되고 nextLine()을 이용해서 a b를 입력한다면 a b가 그대로 저장이 된다는 의미입니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package smile;
 
import java.util.Scanner;
 
public class test {
 
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String name = sc.nextLine();
        int age = sc.nextInt();
        System.out.println(name+"님의 나이는 "+age+"살 입니다.");
        
    }
 
}
 
Colored by Color Scripter

 

 * 참고

 

사진 <1.1> 객체 에러 메세지

위 사진처럼 8번째 코드 박스 친 곳을 보시면 sc객체 아래에 노란 줄이 나올 겁니다. 

우리가 물을 쓰려면 수도꼭지를 열고 다 쓴 후에 닫듯이 마찬가지로 모든 입출력 관련된 객체들은 반드시 사용 후 닫아줘야 하는데 닫아주지 않아서 경고 메세지가 발생하는 것입니다.

화면 입력 같은 경우는 JVM(Java Virtual Machine)에 의해서 자동으로 관리가 되기 때문에 우리가 닫아주지 않아도 되지만 이클립스가 봤을 때는 사용하고 닫아주지 않아서 우리에게 경고 메시지를 보여주는 것입니다. 경고 메세지는 무시해도 되니 신경 쓰지 않아도 되지만 해결 방법은 10번째 코드 다음에 sc.close()를 해주면 됩니다.

 

 

 

반응형

+ Recent posts