item 9 incheol - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki
Effective Java 3e μμ΄ν 9λ₯Ό μμ½ν λ΄μ© μ λλ€.
μμ λ«κΈ°λ ν΄λΌμ΄μΈνΈκ° λμΉκΈ° μ¬μμ μμΈ‘ν μ μλ μ±λ₯ λ¬Έμ λ‘ μ΄μ΄μ§κΈ°λ νλ€.
μ ν΅μ μΌλ‘ μμμ΄ μ λλ‘ λ«νμ 보μ₯νλ μλ¨μΌλ‘ try-finallyκ° μ°μλ€. μμΈκ° λ°μνκ±°λ λ©μλμμ λ°νλλ κ²½μ°λ₯Ό ν¬ν¨ν΄μ λ§μ΄λ€.
static void copy(String src, String dst) throws IOException {
InputStream in = new FilInputStream(src);
try {
OutStream out = new FileOutputStream(dst);
try {
byte[] buf = new byte[BUFFER_SIZE];
int n;
while ((n = in.read(buf)) >= 0)
out.write(buf, 0, n);
} finally {
out.close();
}
} finally {
in.close();
}
}
μ컨λ 물리μ μΈ λ¬Έμ κ° μκΈ΄λ€λ©΄ firstLineOfFile λ©μλ μμ readLine λ©μλκ° μμΈλ₯Ό λμ§κ³ , κ°μ μ΄μ λ‘ close λ©μλλ μ€ν¨ν κ²μ΄λ€. λ¬Όλ‘ λ λ²μ§Έ μμΈ λμ 첫 λ²μ§Έ μμΈλ₯Ό κΈ°λ‘νλλ‘ μ½λλ₯Ό μμ ν μλ μμ§λ§, μ½λκ° λ무 μ§μ λΆν΄μ Έμ μ€μ λ‘ κ·Έλ κ²κΉμ§ νλ κ²½μ°λ κ±°μ μλ€.
μ΄λ¬ν λ¬Έμ λ€μ μλ° 7μ΄ ν¬μ²ν try-with-resources λμ λͺ¨λ ν΄κ²°λμλ€. μ΄ κ΅¬μ‘°λ₯Ό μ¬μ©νλ €λ©΄ ν΄λΉ μμμ΄ AutoCloseable μΈν°νμ΄μ€λ₯Ό ꡬνν΄μΌ νλ€.
static void copy(String src, String dst) throws IOException {
try ( InputStream in = new FilInputStream(src);
OutStream out = new FileOutputStream(dst)) {
byte[] buf = new byte[BUFFER_SIZE];
int n;
while ((n = in.read(buf)) >= 0)
out.write(buf, 0, n);
}
}
try-with-resources λ²μ μ΄ μ§§κ³ μ½κΈ° μμν λΏ μλλΌ λ¬Έμ λ₯Ό μ§λ¨ νκΈ°λ ν¨μ¬ κ°νΈνλ€. λν, μλ° 7μμ Throwableμ μΆκ°λ getSuppressed λ©μλλ₯Ό μ΄μ©νλ©΄ νλ‘κ·Έλ¨ μ½λμμ κ°μ Έμ¬ μλ μλ€.
getSuppressedμ ꡬ체μ μΌλ‘ μ΄λ»κ² μ¬μ©ν μ μμκΉ?
μ 리
κΌ νμν΄μΌ νλ μμμ λ€λ£° λλ try-finally λ§κ³ try-with-resourcesλ₯Ό μ¬μ©νμ. μμΈλ μλ€. μ½λλ λ μ§§κ³ λΆλͺ ν΄μ§κ³ , λ§λ€μ΄μ§λ μμΈ μ 보λ ν¨μ¬ μ μ©νλ€. try-finallyλ‘ μμ±νλ©΄ μ€μ©μ μ΄μ§ λͺ»ν λ§νΌ μ½λκ° μ§μ λΆ ν΄μ§λ κ²½μ°λΌλ try-wirh-resources λ‘λ μ ννκ³ μ½κ² μμμ νμν μ μλ€.