SKILL/JAVA

์ž๋ฐ” : java 7 - ๋ณด์™„๋œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

Jedy_Kim 2021. 9. 3. 15:24
728x90

๐Ÿš€  ์„œ๋ก 

try(Scanner sc = new Scanner(new File(fileName), encoding)) {...
์ต์ˆ™ํ•œ ๋“ฏ ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ์œ„์™€ ๊ฐ™์€ ๋ฌธ์žฅ์„ ๋ณด๋ฉฐ... ๋‚ด๊ฐ€ ๋ณด๊ณ  ์žˆ๋Š” ์ฝ”๋“œ๊ฐ€ ์ž๋ฐ”๊ฐ€ ๋งž๋Š”๊ฐ€? ๋ผ๋ฉฐ, ์ฐพ์•„๋ณด๋ฉด์„œ java 7๋ถ€ํ„ฐ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฌธ๋ฒ•์ด ๋ณด์™„๋˜์—ˆ์Œ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. ํฌ๊ฒŒ ์–ด๋ ค์›Œ์ง„ ์ ์€ ์—†์œผ๋‹ˆ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž.

๐Ÿš€  ๋ณธ๋ก 

ํฌ๊ฒŒ ๋‘ ๋ถ€๋ถ„์—์„œ ๋ณ€ํ™”๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ ์šฐ์„  try, catch, and finally ๋ถ€๋ถ„์— ์žˆ์–ด์„œ์˜ ๋ณด์™„๋œ ์ ๊ณผ try-with-resources ๋ฌธ์ด ์ž๋ฐ” 7๋ถ€ํ„ฐ ๋„์ž…๋œ ๋ถ€๋ถ„์ด๋‹ค. 

๐ŸŽฏ try, catch, and finally 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package com.study;
 
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
 
public class Java7ExceptionSample  {
    private List<Integer> list;
    private static final int SIZE = 10;
 
    public static void main(String[] args) {
        Java7ExceptionSample sample = new Java7ExceptionSample();
        sample.writeList();
    }
 
    public Java7ExceptionSample () {
        list = new ArrayList<Integer>(SIZE);
        for (int i = 0; i < SIZE; i++) {
            list.add(i);
        }
    }
 
    public void writeList() {
        // FileWirter ์ƒ์„ฑ์ž๋Š” IOException์„ ๋ฐœ์ƒ ์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋“œ์‹œ ์ด๋ฅผ ์žก์•„์ฃผ๋Š” ๊ตฌ๋ฌธ์ด ํ•„์š”ํ•˜๋‹ค.
        PrintWriter out = new PrintWriter(new FileWriter("OutFile.txt"));
 
        for (int i = 0; i < SIZE; i++) {
            // get(int) ๋ฉ”์„œ๋“œ๋„ IndexOutOfBoundsException ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ ์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋“œ์‹œ ์ด๋ฅผ ์žก์•„์ฃผ๋Š” ๊ตฌ๋ฌธ์ด ํ•„์š”ํ•˜๋‹ค.
            out.println("Value at: " + i + " = " + list.get(i));
        }
        out.close();
    }
 
}
 
cs
์šฐ์„  ์œ„์˜ ์˜ˆ์ œ๋ฅผ IDE์— ๋„ฃ์–ด๋ณด๋ฉด, writeList() ๋ฉ”์„œ๋“œ์˜ FileWriter๋ถ€๋ถ„์„ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค˜์•ผ ๋œ ๋‹ค๋Š” ๋นจ๊ฐ„ ๋ฐ‘์ค„์„ ๋งŒ๋‚˜๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค. ๋˜ ๊ทธ ์•„๋ž˜์ค„์— ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ถ€๋ถ„์—์„œ ์ธ๋ฑ์Šค๋ฅผ ๋ฒ—์–ด๋‚  ๋ฆฌ์Šคํฌ๊ฐ€ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ๋ถ€๋ถ„๋„ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ๊ตฌ๋ฌธ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์ค„ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. 
์ฆ‰ writeList() ๋ฉ”์„œ๋“œ๋Š” IOException๊ณผ IndexOutOfBoundsException ์ด๋Ÿฐ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค. 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    public void writeList() {
        // FileWirter ์ƒ์„ฑ์ž๋Š” IOException์„ ๋ฐœ์ƒ ์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋“œ์‹œ ์ด๋ฅผ ์žก์•„์ฃผ๋Š” ๊ตฌ๋ฌธ์ด ํ•„์š”ํ•˜๋‹ค.
        PrintWriter out = null;
        try {
            out = new PrintWriter(new FileWriter("OutFile.txt"));
            for (int i = 0; i < SIZE; i++) { 
                // get(int) ๋ฉ”์„œ๋“œ๋„ IndexOutOfBoundsException ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ ์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋“œ์‹œ ์ด๋ฅผ ์žก์•„์ฃผ๋Š” ๊ตฌ๋ฌธ์ด ํ•„์š”ํ•˜๋‹ค.
                out.println("Value at: " + i + " = " + list.get(i));
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (IndexOutOfBoundsException i) {
            i.printStackTrace();
        } finally {
            out.close();
        } 
    }
cs
writeList() ๋ฉ”์„œ๋“œ ๋ถ€๋ถ„์—์„œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ๋ฉด ์œ„์™€ ๊ฐ™์ด ํ•ด์ค˜์•ผ ํ•  ๊ฒƒ์ด๋‹ค. Catch ๋ถ€๋ถ„์„ ๋ณด๋ฉด ๋‘ ์ค„๋กœ ์ฒ˜๋ฆฌ๋˜์—ˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๋ฌผ๋กœ Exception e ์ด๋Ÿฐ ์‹์œผ๋กœ ํ•œ ๋ฒˆ์— ํ•ด์ค„ ์ˆ˜๋„ ์žˆ์„ ๊ฒƒ์ด์ง€๋งŒ, ๊ทธ๋ ‡๊ฒŒ ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๊ฐ€์žฅํ•˜๋ฉด ์ €๋ ‡๊ฒŒ ์˜ˆ์™ธ ์ข…๋ฅ˜์— ๋”ฐ๋ผ catch๋ฌธ์ด ์ ์  ๋Š˜์–ด๋‚˜๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค. 
1
2
3
        catch (IOException | IndexOutOfBoundsException ex) {
            ex.printStackTrace();
        }
cs
!!!! ์œ„์˜ catch๋ฌธ์—์„œ | ๋ฅผ ํ†ตํ•ด ์ด์–ด์„œ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ด์กŒ๋‹ค.

๐ŸŽฏ try-with-resources

์–ด๋– ํ•œ ์ŠคํŠธ๋ฆผ ๊ฐ์ฒด๋ฅผ ์“ฐ๊ณ  ๋‚˜๋ฉด ๋ฐ˜๋“œ์‹œ ์ž์›์„ ํ•ด์ œ์‹œ์ผœ์ค˜์•ผ ํ•œ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ ์‹์œผ๋กœ ๋ง์ด๋‹ค.
์ƒํ™ฉ์— ๋”ฐ๋ผ์„œ๋Š” ์ € ๋ถ€๋ถ„๋„ ์‚ฌ์šฉํ•œ ์ŠคํŠธ๋ฆผ ๊ฐ์ฒด๋งŒํผ ๋‹ซ์•„์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ„์—์„œ ๋ดค๋˜  Java 7 ๋ฒ„์ „ ์ด์ „์˜ catch๋ฌธ์ฒ˜๋Ÿผ ์ง€์ €๋ถ„ํ•ด์งˆ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.
1
2
3
4
5
        finally {
            if(out != null) {
                out.close();
            }
        }
cs
์ด๋Ÿฌํ•œ ๋ถ€๋ถ„์— ์žˆ์–ด Java 7 ๋ฒ„์ „์—์„œ๋Š” try-with-resources ๋ฌธ์„ ๋„์ž…ํ•˜์˜€๋‹ค. ์ฝ”๋“œ๋ฅผ ๋จผ์ € ๋ณด์ž.
1
2
3
4
5
6
7
8
9
10
    public void writeList2() {
        // try-with-resources ๋ฌธ 
        try( PrintWriter out = new PrintWriter(new FileWriter("OutFile.txt")) ) {
            for (int i = 0; i < SIZE; i++) {
                out.println("Value at: " + i + " = " + list.get(i));
            }
        } catch (IOException | IndexOutOfBoundsException ex) {
            ex.printStackTrace();
        }
    }
cs
๋ชจ์–‘์€ try(๋ฆฌ์†Œ์Šค๋“ค..) ์ด๋ ‡๊ฒŒ ๋„ฃ์–ด์ฃผ๋ฉฐ ์ด์–ด๊ฐ€์ฃผ๋ฉด ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์€ ํ”„๋กœ๊ทธ๋žจ์ด ๋๋‚œ ํ›„ ๋‹ซ์•„์•ผ ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ๋ฆฌ์†Œ์Šค ๋ฌธ์€ ๊ฐ ๋ฆฌ์†Œ์Šค๊ฐ€ ์‚ฌ์šฉ์„ ์™„๋ฃŒํ•œ ๋’ค ์ž๋™์„ ๋‹ซํžˆ๋„๋ก ํ•œ๋‹ค.

Java 5๋ถ€ํ„ฐ ์ถ”๊ฐ€๋œ java.io.Closeable์ด๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋“ค์€ ๋ช…์‹œ์ ์œผ๋กœ close() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ซ์•„์ฃผ์–ด์•ผ๋งŒ ํ•œ๋‹ค. 

ํ•˜์ง€๋งŒ Java 7๋ถ€ํ„ฐ ํ•ด๋‹น ์ธํ„ฐํŽ˜์ด์Šค๋Š” "public interface Closeable extends AutoCloseable" ์ด๋ ‡๊ฒŒ ์„ ์–ธ ๋˜์—ˆ๋‹ค. ์—ฌ๊ธฐ์„œ AutoCloseable์ด๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†๋ฐ›์€ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
๋˜ ์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋Š” try-with-resources ๋ฌธ์žฅ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งํฌ๋ฅผ ๋ˆ„๋ฅด๋ฉด ๋„ํ๋จผํŠธ๋ฅผ ํ†ตํ•ด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿš€  ๊ฒฐ๋ก 

๋„ํ๋จผํŠธ๋ฅผ ์ž๊พธ ๋ณด๋ ค๊ณ  ๋…ธ๋ ฅ ์ค‘์ธ๋ฐ ์ œ๋„ค๋ฆญ ๋•Œ๋Š” ๊ฐœ๋… ์ž์ฒด๋„ ์–ด๋ ค์› ์–ด์„œ ์‰ฝ์ง€ ์•Š์•˜์ง€๋งŒ, ์˜ˆ์™ธ ๋ฌธ์€ ์–ด๋ ต์ง€ ์•Š์•„ ๋„ํ๋จผํŠธ๊ฐ€ ์‰ฝ๊ฒŒ ์ฝํ˜€ ์˜ˆ์™ธ ๋ฌธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๋”์šฑ ๋„ํ๋จผํŠธ์™€ ์นœํ•ด์ง€๋ ค๊ณ  ๋…ธ๋ ฅํ•ด์•ผ๊ฒ ๋‹ค.

 

์ฐธ๊ณ ์ž๋ฃŒ

- ์ž๋ฐ”์˜์‹ (์ด์ƒ๋ฏผ ์ €)

- ๊ณต์‹๋ฌธ์„œ

https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html

 

The try-with-resources Statement (The Java™ Tutorials > Essential Java Classes > Exceptions)

The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available. See Java Language Changes for a summary of updated

docs.oracle.com

 

๋ฐ˜์‘ํ˜•