2023-05-11 TIL (Java : Scanner 클래스, 예외 복습)
오늘 배운 내용
- 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