item 9 sungjaeyoon - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki

try-finally๋ณด๋‹ค๋Š” try-with-resources๋ฅผ ์‚ฌ์šฉํ•˜๋ผ.

์ž๋ฐ” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—๋Š” close ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด ์ง์ ‘ ๋‹ซ์•„์ค˜์•ผ ํ•˜๋Š” ์ž์›์ด ๋งŽ๋‹ค.
์ƒ๋‹น์ˆ˜๊ฐ€ ์•ˆ์ „๋ง์œผ๋กœ finalizer๋ฅผ ์ด์šฉํ•˜์ง€๋งŒ ๋ฏฟ์„๋งŒ ํ•˜์ง€ ๋ชปํ•˜๋‹ค.(item8)

์ „ํ†ต์ ์œผ๋กœ ์ž์›์„ ๋‹ซํž˜์„ ๋ณด์žฅํ•˜๋Š” ์ˆ˜๋‹จ์œผ๋กœ์„œ ์•„๋ž˜์™€ ๊ฐ™์ด try-finally๊ฐ€ ์“ฐ์˜€๋‹ค.

try {
    OutputStream out = new FileOutputStream("filePath");
    // do something
} finally {
    out.close();
}

ํ•˜์ง€๋งŒ 2๊ฐœ์˜ ์ž์›์„ ๋‹ซ์•„์•ผ ํ•˜๋Š” ๊ตฌ๊ฐ„์—์„œ๋Š” ์˜ˆ์™ธ๊ฐ€ ๋ฌด์‹œ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๋„ ๋–จ์–ด์ง„๋‹ค.

public void copy(String src, String dst) throws IOException {
    InputStream in = new FileInputStream(src);
    try {
        OutputStream out = new FileOutputStream(dst);
        try {
            // do something
        } finally {
            out.close();
        }
    } finally {
        in.close();
    }
}

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋Š” ์ž๋ฐ” 7์—์„œ ๋“ฑ์žฅํ•œ try-with-resources๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.
๋ฌผ๋ก , AutoCloseable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค์— ๋Œ€ํ•ด์„œ๋งŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž์›๋„ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

public void copy() throws IOException {
    try (InputStream in = new FileInputStream("filePath");
         OutputStream out = new FileOutputStream("filePath")) {
        // do something
    }
}

์ •๋ฆฌ

๊ผญ ํšŒ์ˆ˜ํ•ด์•ผ ํ•˜๋Š” ์ž์›์€ try-with-resources ๋ฌธ์žฅ์„ ์‚ฌ์šฉํ•˜์ž. ์ฝ”๋“œ๋Š” ๋” ์งง๊ณ  ๋ถ„๋ช…ํ•ด์ง„๋‹ค.