Java의 try-finally구문

static readLine(String path) throws IOException {
	BufferReader br = new BufferReader(new FileReader(path));
	try {
		return br.readLine;
	} finally {
		br.close();
	}
}

⛔️ 해당 구문의 단점

  1. 자원을 2개 이상 사용하는 경우 try문이 중첩된다.
  2. try 블록과 finally 블록 둘 다에서 예외가 발생하는 경우 문제의 원인을 찾기 힘들다. 만약 기기에서 물리적인 문제가 생기면 try 블록의 readLine과 finally 블록의 close문 모두에서 예외가 발생하는데 이렇게 되면 두번째 예외가 첫번째 예외를 덮어버려서 스택 추적 내의 첫번째 예외에 관한 정보가 남지 않는다.

이러한 문제를 해결하기 위해서 try-with-resources 탄생⭐️

static readLine(String path) throws IOException {
	try(BufferReader br = new BufferReader(new FileReader(path))) {
		return br.readLine();
	}
}

kotlin에서는 **use()**를 사용하면 된다.

fun readLine(path: String): String {
	BufferReader(FileReader(path)).use { br -> 
		return br.readLine()
	}
}