1. ์ค๋ช
AutoClosable์ด๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ try๊ตฌ๋ฌธ ()์์์ ์์ฑ ํ์ ๋๋ฅผ ๊ฐ์ ํ๋ค.
ํด๋น ๊ฐ์ฒด๊ฐ try catch ๊ตฌ๋ฌธ์ ๋ค ์ง๋๊ฐ์ผ๋ฉด, try ๊ตฌ๋ฌธ์ด ์๋์ผ๋ก close ๋งค์๋๋ฅผ ํธ์ถํ์ฌ close์ ๊ธฐ๋ฅ์ ์ํํ๊ฒ ํ๋ค.
ํด๋น ์คํฌ์ ํด๋์ค๊ฐ AutoClosable์ด๋ผ๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํ ํด์ผ๋ง ์ธ ์ ์๋ค.
2. ์ฝ๋ ๋ฆฌ๋ทฐ
import java.io.BufferedWriter;
public class _05_TryWithResources {
public static void main(String[] args) {
// close ๊ตฌ๋ฌธ๋ ์์ธ์ฒ๋ฆฌ๊ฐ ํ์ํด์
// try-catch-finally ๊ตฌ๋ฌธ ์์ ๋ try catch ๊ตฌ๋ฌธ์ด ๋ค์ด๊ฐ ๊ฑธ ๋ณผ ์ ์๋ค.
MyFileWriter writer1 = null;
try {
writer1 = new MyFileWriter();
writer1.write("์์ด์คํฌ๋ฆผ์ด ๋จน๊ณ ์ถ์ด์.");
}catch (Exception e){
e.printStackTrace();
} finally {
try {
writer1.close();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
// ์์ ๊ณผ์ ์ ์๋์ผ๋ก ํ๋ ๋ฐฉ๋ฒ
// try ()์์์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉด try ๊ตฌ๋ฌธ์ด ์๋์ผ๋ก close ๋งค์๋๋ฅผ ํธ์ถํด์ค.
// ์ด๋ฅผ ์ฐ๊ธฐ ์ํด์๋ ํด๋น ๊ฐ์ฒด์ ํด๋์ค๊ฐ AutoClosable์ด๋ interface๋ฅผ ๊ตฌํํด์ผํจ.
//----- ์๋์ผ๋ก close ํด์ฃผ๊ธฐ์ ๋ฌด์กฐ๊ฑด ์คํํ๋ ๊ตฌ๋ฌธ์ ๋ด๋ finally๊ฐ ํ์ ์๋ค!
System.out.println("-------------------------");
try (MyFileWriter writer2 = new MyFileWriter()) {
writer2.write("๋นต์ด ๋จน๊ณ ์ถ์ด์.");
} catch (Exception e) {
e.printStackTrace();
}
BufferedWriter bw = null;
}
}
class MyFileWriter implements AutoCloseable {
@Override
public void close() throws Exception {
System.out.println("ํ์ผ์ ์ ์์ ์ผ๋ก ๋ซ์ต๋๋ค.");
}
public void write(String line) {
System.out.println("ํ์ผ์ ๋ด์ฉ์ ์
๋ ฅํฉ๋๋ค.");
System.out.println("์
๋ ฅ ๋ด์ฉ: " + line);
}
}
3. ์ค์ค๋ก ํด๋ณด๊ธฐ
public class TryWithResource_Myself {
public static void main(String[] args) {
FileWriter w1 = null;
try {
w1 = new FileWriter();
w1.write("๊ธ์๊ฐ์ฐ์ด ํธ๋ฅด๊ตฌ๋.");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
w1.close();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
System.out.println("----------------- ์ฝ๊ฒ ํ๊ธฐ -------------------");
try(FileWriter w2 = new FileWriter()) {
w2.write("์์์ ๊ทธ๋ฆฌ์๋ผ");
} catch (Exception e) {
e.printStackTrace();
}
}
}
class FileWriter implements AutoCloseable {
@Override
public void close() throws Exception {
System.out.println("ํ์ผ์ ๋ซ์ต๋๋ค.");
}
public void write(String line) {
System.out.println("๊ธ์ ์ ์ต๋๋ค. : " + line);
}
}
0