[Effective Java 3/e] 아이템 9 - try-finally보다는 try-with-resources를 사용하라


아이템 9 - try-finally보다는 try-with-resources를 사용하라

자원이 둘 이상이면 try-finally 방식은 너무 지저분하다

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-with-resoruces - 짧고 매혹적이다

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);
  }
}

try-with-resoruces를 catch 절과 함께 쓰는 모습

static String firstLineOfFile (String path, String defaultVal) {
  try (BufferedReader br = new BufferedReader(new FileReader(path))) {
     return br.readLine();
  } catch (IOException e) {
    return defaultVal;
  }
}