TIL&WIL

2023-05-11 TIL (Java : Scanner 클래스, 예외 복습)

blues_jun 2023. 5. 11. 21:14

오늘 배운 내용

  • Java : Scanner, 예외 try-with-resource statements

학습한 내용

Scanner 클래스란

Scanner 클래스는 자바의 기본 입력 클래스로 사용자로부터 문자열 또는 숫자 등의 사용자 입력을 받을 수 있게 하는 클래스이다. Scanner 클래스는 java.util 패키지 내에 존재하는 클래스이다.

 

Scanner 클래스는 자바에서 콘솔의 표준 입력의 대표 클래스로, 가장 간단하고 쉬운 방법으로 읽어올 수 있다.


Scanner 클래스의 사용 방법

1. Scanner 클래스는 java.util 패키지에 속한 클래스이므로 java.util 패키지를 import 해야한다.

import java.util.Scanner; //Scanner 클래스만 import
import java.util.*; //java.uril 내의 모든 클래스 import

 

2. Scanner의 객체를 생성한다.

Scanner scan = new Scanner(System.in);

여기서 System.in은 콘솔창에서 입력받는데 필요한 스캐너 변수이다. 즉 화면에서 입력을 받겠다는 의미이다.

(파일로부터의 입력은 File 클래스를 활용한다.)

 

3. Scanner 객체를 사용하여 입력값을 받는다.

String a = scan.next(); //입력받은 문자열을 a에 저장한다.

여기서 입력받을 데이터 탑에 의해서 Scanner 클래스의 메소드를 다르게 해야한다.

 

Scanner 클래스의 메소드는 다음과 같다.

 

Scanner scan = new Scanner(System.in);
 		
//정수형 입력 및 리턴
byte a = scan.nextByte(); 	// byte형
short b = scan.nextShort(); 	// short형
int c = scan.nextInt(); 	// int형
long d = scan.nextLong(); 	// long형
 		
  
//실수형 입력 및 리턴
float e = scan.nextFloat(); 	// float형
double f = scan.nextDouble(); 	// double형 

//논리형 입력 및 리턴
boolean g = scan.nextBoolean(); // boolean형
 	
//문자 입력 및 리턴
String h = scan.next(); 	// String형(공백을 기준으로 한 단어를 읽음)
String i = scan.nextLine(); 	// String형(개행을 기준으로 한 줄을 읽음)

 

더욱 자세한 내용은 다음을 참고 !

https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Scanner.html

 

Scanner (Java SE 17 & JDK 17)

All Implemented Interfaces: Closeable, AutoCloseable, Iterator A simple text scanner which can parse primitive types and strings using regular expressions. A Scanner breaks its input into tokens using a delimiter pattern, which by default matches whitespac

docs.oracle.com


try-with-resource

close 메소드

java에서 리소스(resource)는 자바 내부에 존재하는 데이터가 아닌 외부 데이터를 말한다.

예로는 DB, File, NetWork가 있다.

 

리소스는 자바 내부에 존재하는 것이 아니기 때문에 불안정하고 여러 예외적인 상황이 발생할 수 있다.

그렇기 때문에 리소스를  활용한 작업이 다 끝나면 리소스를 놓아주어야 한다.

이럴 때 사용하는 메소드가 바로 'close()' 메소드 이다.

FileWriter fw = new FilWriter();
fw.Write("hello")
fw.close()

예외 (Exception)

FileWriter에서 발생하는 예외는 IOException으로 이 예외는 checked 예외이다. 즉, 반드시 예외처리를 해야한다.

try-catch문을 사용하여 예외처리를 하면 다음 코드와 같다.

import java.io.FileWriter;
import java.io.IOException;

public class CheckedExceptionApp {
    public static void main (String[] args) {
        FileWriter f = null;
        try {
            f = new FileWriter("data.txt");
            f.write("hello");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 만약에 f가 null이 아니라면
            if (f != null ) {
                try{
                    f.close(); // close를 하기 전에 예외가 발생할 수 있기 떄문에 finally로 처리
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

try-with-resource

위의 코드는 close 메소드를 처리하기위해 여러 처리를 해서 많이 복잡하다.

여기서 사용할 수 있는 기능이 'try-with-resource'이다. 사용한 코드는 다음과 같다.

import java.io.FileWriter;
import java.io.IOException;

public class TryWithResource {
    public static void main (String[] args) {
        // try with resource statements
        try (FileWriter f = new FileWriter("data.txt");) {
            f.write("hello");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위의 코드와 비교했을 때, 훨씬 간단하게 예외를 처리할 수 있는 것을 볼 수 있다.

 

기본 문법은 다음과 같다.

try (close가 필요한 클래스를 인스턴스화) {
	"예외의 발생이 예상되는 로직" 
    	"close는 생략"
} catch (예외 e) {
	"예외가 발생했을 때 실행되는 로직"
}

try-with-resource의 조건

try-with-resource 를 사용하려면 다음과 같은 조건이 필요하다.

  • JAVA7부터 추가된 기능
  • close를 사용해야하는 클래스가 'AutoCloseable'이라는 인터페이스를 구현해야한다.

참고

https://opentutorials.org/module/4874/28730