자바 - Try with Resources: 초보자를 위한 가이드

안녕하세요, 미래의 자바 마에스토들! 오늘은 자바의 훌륭한 기능 중 하나를 탐구할 것입니다. 이 기능은 자원을 다룰 때 여러분의 삶을 훨씬 더 쉽게 만들어 줄 것입니다. 그 이름은 "Try with Resources"입니다. 믿어주시면, 이将成为编程世界中 여러분의 새로운 최고의 친구가 될 것입니다!

Java - try-with-resources

자바에서 자원이란 무엇인가요?

try-with-resources 문법에 뛰어들기 전에, 자바에서 "자원"이란 무엇을 의미하는지 이해해 보겠습니다. 자원은 여러분의 프로그램이 컴퓨터에서 빌리고 사용해야 할 것들을 생각해 보세요. 이는 파일, 데이터베이스 연결, 네트워크 소켓, 또는 프로그램이 상호작용해야 할 다른 외부 시스템일 수 있습니다.

도서관에서 책을 빌리는 것과 마찬가지로, 사용 후 반납해야 합니다. 자바에서는 이러한 자원을 사용 후 "닫아야" 합니다. 그렇지 않으면 메모리 누수이나 다른 프로그램이 해당 자원에 접근할 수 없는 등의 문제가 발생할 수 있습니다.

예전 방법: Try-Catch-Finally

자바 7에서 try-with-resources를 도입하기 전까지, 우리는 finally 블록에서 수동으로 자원을 닫아야 했습니다. 예를 들어보겠습니다:

BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader("example.txt"));
String firstLine = reader.readLine();
System.out.println(firstLine);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

헐! 파일에서 한 줄을 읽고 reader를 닫기 위해 이렇게 많은 코드를 써야 한다니, 정말 피곤하죠. 펜슬을 빌리기 위해 세 페이지의 양식을 채워야 하는 것과 같아요!

등장: Try with Resources

이제 try-with-resources가 이 과정을 얼마나 더 간단하게 만들어 줄지 볼게요:

try (BufferedReader reader = new BufferedReader(new FileReader("example.txt"))) {
String firstLine = reader.readLine();
System.out.println(firstLine);
} catch (IOException e) {
e.printStackTrace();
}

많이 깔끔하죠? 마법 같죠! 하지만 어떻게 작동하는 건가요?

Try with Resources의 작동 방식

  1. try 키워드 뒤에 괄호 안에 자원(이 경우 BufferedReader)을 선언하고 초기화합니다.
  2. try 블록이 종료되면 자바는 자동으로 close() 메서드를 호출합니다. 이는 정상적으로 종료되었든 예외가 발생했든 상관없습니다.
  3. 자원을 닫는 중 예외가 발생하면, 그 예외는 억제되고 try 블록에서 발생한 원래의 예외(있다면)가 던져집니다.

도서관의 로봇 도서관리사처럼, 잊어버리더라도 자동으로 책을 반납해 줄 거예요!

여러 개의 자원

try-with-resources의 멋진 점 중 하나는 한 번에 여러 자원을 관리할 수 있다는 것입니다. 세미콜론으로 구분하면 됩니다:

try (FileInputStream input = new FileInputStream("input.txt");
FileOutputStream output = new FileOutputStream("output.txt")) {
// input에서 읽고 output에 씀
int data;
while ((data = input.read()) != -1) {
output.write(data);
}
} catch (IOException e) {
e.printStackTrace();
}

이 예제에서는 input과 output 스트림 모두 try 블록이 종료되면 자동으로 닫힙니다. 로봇 도서관리사가 여러 권의 책을 한 번에 반납해 줄 거예요!

자바 9 개선: 효과적으로 최종 변수

자바 9는 try-with-resources를 더욱 개선했습니다. 이제 초기화 후 값이 변하지 않는 effectively final 변수(효과적으로 최종 변수)를 외부에서 선언한 변수를 사용할 수 있습니다:

BufferedReader reader1 = new BufferedReader(new FileReader("file1.txt"));
BufferedReader reader2 = new BufferedReader(new FileReader("file2.txt"));
try (reader1; reader2) {
// reader1과 reader2 사용
} catch (IOException e) {
e.printStackTrace();
}

이는 특정 상황에서 코드를 더욱 깔끔하게 만들 수 있습니다.

기억해야 할 점

이제 try-with-resources에 대해 배운 것들을 요약해 보겠습니다:

설명
자동 자원 관리 자원은 try 블록이 끝나면 자동으로 닫힙니다
여러 자원 하나의 try-with-resources 문장에서 여러 자원을 관리할 수 있습니다
닫는 순서 자원은 생성된 역순으로 닫힙니다
억제된 예외 닫는 중 발생한 예외는 try 블록의 예외보다 우선순위가 낮습니다
가독성 향상 코드가 더 깔끔하고 쉽게 읽을 수 있게 됩니다
자바 9 개선 외부에서 선언한 효과적으로 최종 변수를 사용할 수 있습니다

결론

try-with-resources는 자바 프로그램에 개인 비서처럼 동작하여, 여러분이 걱정하지 않고도 모든 자원이 올바르게 관리되도록 해줍니다. 이는 코드를 더 깔끔하고 가독성 있게 만들어주는 것뿐만 아니라, 자원 누수를 방지하는 데 큰 도움이 됩니다.

기억해요, 좋은 자원 관리는 프로그래밍에서 중요합니다. 도서관의 책을 시간에 맞게 반납하는 것과 마찬가지입니다. try-with-resources를 사용하면 프로그래밍 세상에서 좋은 시민이 될 수 있습니다.

그럼 이제 여러분의 자바 여정에 try-with-resources가 함께하길 바랍니다! 출발하세요, 제 젊은 패답들, 자바의 Try with Resources가 여러분을 도와줄 것입니다!

Credits: Image by storyset