# autocloseable

Try-With-Resources
문제 상황 어떤 객체가 사용을 마치고 나면 연결을 끊기 위해 close() 라는 메서드를 호출해야 한다고 가정하자. 그런데 이 객체에 logic()을 실행하던 도중, 에러가 발생하여 close() 메서드가 호출되지 않고 프로그램이 종료 되어버렸다. 예제 코드에서는 실제 DB와 연결되어 있지 않기 때문에 별 문제가 없지만, 실제 DB와 연결되었다고 가정한다면 DB에서는 Connection이 해제되지 않고 계속 유지되고 있는 것을 확인할 수 있다. 이때, 기존 코드에서는 Try-Catch-Finally 를 이용하여 다음과 같이 해결하였다. 기존의 해결 방법  문에서 선언된 객체들에 대해서 try가 종료될 때 자동으로 자원을 해제해주는 기능입니다. 주로 외부 자원인 파일 관련 객체와 socket Handler 객체와 같은 자원들은 try-catch-finally 문을 사용하여 마지막에 다 사용한 자원을 해제하는 코드를 많이 보았을 겁니다. AutoCloseable은 try에 선언된 객체가 AutoCloseable을 구현했더라면 Java는 try 구문이 종료될 때 객체의 close() 메소드를 호출해 줍니다. 자바6에서 리소스 사용 및 해제하는 방법을 한번 살펴보고, try-with-resources로 동일한 코드를 리팩토링해보면서 장점이 무엇인지 살펴보겠습니다. 1. 기본 사용 방법 예를 들어, 다음 코드는 try-catch-finally을 사용하여 파일을 열고 문자열을 모두 출력하는 코드입니다. 코드를 보시면 try에서 input
try-with-resources
입출력 예외처리시 Autocloseable 이용하기 입출력을 수행하기 위해서는 데이터를 주고 받는 통로를 열어주어야 한다. 이때, 입출력에 예외가 발생하게 됐을 때 특별한 처리를 해주지 않는다면 입출력을 수행하던 스트림이 open 되어진 상태로 남겨지게 된다. close하지 않은 빨대가 쌓이게 되면 메모리 부족으로 프로그램이 멈출수도 있다. 입출력으로 인한 메모리 누수를 방지하기 위해서는 예외처리를 잘 해주어 예외가 발생한 경우에도 자원이 close 되어 잘 반납될 수 있도록 처리해 주어야 한다. try - with - resource 구문을 사용하게 되면 입출력 처리시 예외가 발생하는 경우 JVM이 자동으로 close()를 호출하여 자원을 반납시켜준다. 즉, 따로 finally(), close()에 종료처리 하지 않아도 된다. try() 안에 입출력 스트림을 생성하는 로직을 작성하는데 이때 해당 객체는 AutoCloseable 인터페이스