Java 7๋ฒ์ ์ด์ ์๋ ๋ค ์ฌ์ฉํ๊ณ ๋ ์์(resource)๋ฅผ ๋ฐ๋ฉํ๊ธฐ ์ํด try-catch-finally๋ฅผ ์ฌ์ฉํ๋ค.
Java 7๋ฒ์ ์ดํ์ ์ถ๊ฐ๋ try-with-resources ๊ธฐ๋ฅ์try ๊ตฌ๋ฌธ์ ๋ฆฌ์์ค๋ฅผ ์ ์ธํ๊ณ , ๋ฆฌ์์ค๋ฅผ ๋ค ์ฌ์ฉํ๊ณ ๋๋ฉด ์๋์ผ๋ก ๋ฐ๋ฉํด์ฃผ๋ ๊ธฐ๋ฅ
์ด๋ค.
์ด์ ์ ์ฌ์ฉํ๋ try-catch-finally ๊ตฌ๋ฌธ์ ์์๋ณด๊ฒ ๋ค.
import java.io.File;import java.io.FileNotFoundException;
import java.util.Scanner;
public class ResourceClose {
public static void main(String[] args) {
Scanner scanner = null;
try {
// scanner ์์ฑ
scanner = new Scanner(new File("input.txt"));
System.out.println(scanner.nextLine());
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
// scanner ๋ฆฌ์์ค ๋ฐ๋ฉ
if (scanner != null) {
scanner.close();
}
}
}
}
๋ฆฌ์์ค ์์ฑ์ try ๊ตฌ๋ฌธ์์, ๋ฆฌ์์ค ๋ฐ๋ฉ์ finally์์ ์ํํ ๋ชจ์ต์ด๋ค.
- ์์ ๋ฐ๋ฉ์ ์ํด ์ฝ๋๊ฐ ๋ณต์กํด์ง
- ์์ ์ด ๋ฒ๊ฑฐ๋ก์
- ์ค์๋ก ์์์ ๋ฐ๋ฉํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ ๋ฐ์
- ์๋ฌ๋ก ์์์ ๋ฐ๋ฉํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ ๋ฐ์
- ์๋ฌ ์คํ ํธ๋ ์ด์ค๊ฐ ๋๋ฝ๋์ด ๋๋ฒ๊น ์ด ์ด๋ ค์
=> ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด try-with-resources๊ฐ ์ถ๊ฐ๋์๋ค.
์ด์ try-with-resources ๊ตฌ๋ฌธ์ ์์๋ณด๊ฒ ๋ค.
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class ResourceClose {
public static void main(String[] args) {
try (Scanner scanner = new Scanner(new File("input.txt"))) { System.out.println(scanner.nextLine());
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
try ์์ ๊ดํธ์์์ ๋ฆฌ์์ค๋ฅผ ์์ฑํ๋ ์ฝ๋๋ฅผ ๊ฐ์ด ์์ฑํ๋ค.
๋ฆฌ์์ค๋ฅผ ์์ฑํ๊ณ , ์๋์ผ๋ก ๋ฐ๋ฉํ๋ค.
AutoClosable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ ์๋ ์์์ ๋ํด try-with-resources๋ฅผ ์ ์ฉ ๊ฐ๋ฅํ๋๋ก ํ์๋ค.
์ ๊ธฐํ ์ ์ ๊ธฐ์กด์ Closable์ ๋ถ๋ชจ ์ธํฐํ์ด์ค๋ก AutoClosable์ ์ถ๊ฐํ๋ค.
์ด๋ก์จ,ํ์ ํธํ์ฑ
์ 100% ๋ฌ์ฑํจ๊ณผ ๋์์ ๋ณ๊ฒฝ ์์ ์ ๋ํ ์๊ณ ๊ฐ ์ค์๋ค.
์๋์ ๊ฐ์ด ;
๋ก ๊ตฌ๋ถํ์ฌ ์ฌ๋ฌ ๋ฆฌ์์ค๋ฅผ ์์ฑํ ์ ์๋ค.
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Scanner;
public class ResourceClose {
public static void main(String[] args) {
try (Scanner scanner = new Scanner(new File("input.txt"));
PrintWriter pw = new PrintWriter(new File("output.txt"))) {
System.out.println(scanner.nextLine());
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}