devSoyoung / 2019-KHU-spring-study

2019년 1학기 컴퓨터공학과 백엔드 스터디 : Spring
6 stars 0 forks source link

try-finally 보다는 try-with-resources 를 사용하라 #4

Closed Ryulth closed 5 years ago

Ryulth commented 5 years ago

try-with-resources

Item9 : try-finally 보다는 try-with-resources 를 사용하라
(Effective JAVA 3/E)

/**
 * @author Josh Bloch
 * @since 1.7
 */
public interface AutoCloseable {
    void close() throws Exception;
}

Josh Bloch 는 이펙티브 자바 저자이다.

왜 Close() 가 중요한가?

    FileOutputStream out = null; 
    try{
        out=new FileOutputStream("test.txt");
    } catch(FileNotFoundException e){
        e.printStackTrace();
    } finally{
        if(out!=null)
        {   try { 
            out.close(); //close 하다가 예외가 발생할 수 있다. 
            } catch (IOException e) { 
                e.printStackTrace(); 
            } 
        }
    }

try-with-resources 사용한 방법

    try(FileOutputStream out = new FileOutputStream("test.txt")) { 
    //로직 구현 
    }catch(IOException e){ 
    e.printStackTrace(); 
    }    

AutoCloseable 시에도 예외가 발생하는 경우

    javaTest.IOException at 
    javaTest.MyResource.out(ExceptionTest_1.java:27) at 
        Suppressed: javaTest.CloseException at 
            javaTest.FileOutputStream.close(ExceptionTest_1.java:23) at 

AutoCloseable 구현

class Test implements AutoCloseable{
    public Test(){
    }

    @Override
    public void close() throws Exception {
        System.out.println("Test Close Exception");
    }
}

public static void main(String[] args) {
    try(Test test = new Test()){

    }catch(Exception e){

    }
}