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

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

  • ์ž๋ฐ” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—๋Š” close ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด ์ง์ ‘ ๋‹ซ์•„์ค˜์•ผ ํ•˜๋Š” ์ž์›์ด ๋งŽ๋‹ค. InputStream, OutputStream, java.sql.Connection ๋“ฑ์ด ์ข‹์€ ์˜ˆ๋‹ค. ์ž์› ๋‹ซ๊ธฐ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋†“์น˜๊ธฐ ์‰ฌ์›Œ์„œ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๋Š” ์„ฑ๋Šฅ ๋ฌธ์ œ๋กœ ์ด์–ด์ง€๊ธฐ๋„ ํ•œ๋‹ค.

try-fincally์˜ ๋ฌธ์ œ์ 

static void copy(String src, String dst) throws IOException {
    InputStream in = new FileInputStream(src);
    try {
        OutputStream 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();
    }
}

try-catch ์ง€์˜ฅ์ด ์—ด๋ฆฐ๋‹ค.

  • try-finally ๋Š” ์ž์›์ด 2๊ฐœ ์ด์ƒ์ธ ๊ฒฝ์šฐ ์ž์› ํšŒ์ˆ˜๋ฅผ ์œ„ํ•ด 2์ค‘์œผ๋กœ try-catch ๋ฅผ ๊ฐ์‹ธ์•ผ ํ•œ๋‹ค.
  • ์•ˆ์ชฝ์˜ finally์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ ์ตœ์ดˆ์˜ ์˜ˆ์™ธ๋Š” ๋ฌด์‹œ๋˜์–ด ๋””๋ฒ„๊น…์ด ํž˜๋“ค์–ด์ง„๋‹ค.

try-with-resources!!

static void copy(String src, String dst) throws IOException {
    try (InputStream in = new FileInputStream(src);
        OutputStream out = new FileOutputStream(dst)) {
        byte[] buf = new byte[BUFFER_SIZE];
        int n;
        while ((n = in.read(buf)) >= 0)
            out.write(buf, 0, n);
    }
}

2๊ฐœ ์ด์ƒ์˜ ์ž์›๋„ ๊น”๋”ํ•˜๊ฒŒ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•˜๋‹ค.

  • ์ž๋ฐ” 7์ด ํˆฌ์ฒ™ํ•œ try-with-resources ๋•์— ๋ชจ๋‘ ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค. ์ด ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํ•ด๋‹น ์ž์›์ด AutoCloseable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. ๋‹จ์ˆœํžˆ void๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” close ๋ฉ”์„œ๋“œ ํ•˜๋‚˜๋งŒ ๋ฉ๊ทธ๋Ÿฌ๋‹ˆ ์ •์˜ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋‹ค. ์ž๋ฐ” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์„œ๋“œํŒŒํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์˜ ์ˆ˜๋งŽ์€ ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ด๋ฏธ AutoCloseable์„ ๊ตฌํ˜„ํ•˜๊ฑฐ๋‚˜ ํ™•์žฅํ•ด๋’€๋‹ค.

ํ•ต์‹ฌ์ •๋ฆฌ

๊ผญ ํšŒ์ˆ˜ํ•ด์•ผ ํ•˜๋Š” ์ž์›์„ ๋‹ค๋ฃฐ ๋•Œ๋Š” try-finall ๋ง๊ณ , try-with-resources๋ฅผ ์‚ฌ์šฉํ•˜์ž.
์˜ˆ์™ธ๋Š” ์—†๋‹ค.
์ฝ”๋“œ๋Š” ๋” ์งง๊ณ  ๋ถ„๋ช…ํ•ด์ง€๊ณ , ๋งŒ๋“ค์–ด์ง€๋Š” ์˜ˆ์™ธ ์ •๋ณด๋„ ํ›จ์”ฌ ์œ ์šฉํ•˜๋‹ค.
try-finally๋กœ ์ž‘์„ฑํ•˜๋ฉด ์‹ค์šฉ์ ์ด์ง€ ๋ชปํ•  ๋งŒํผ ์ฝ”๋“œ๊ฐ€ ์ง€์ €๋ถ„ํ•ด์ง€๋Š” ๊ฒฝ์šฐ๋ผ๋„, try-with-resources๋กœ๋Š” ์ •ํ™•ํ•˜๊ณ  ์‰ฝ๊ฒŒ ์ž์›์„ ํšŒ์ˆ˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

โš ๏ธ **GitHub.com Fallback** โš ๏ธ