코틀린/JVM에서 사용하는 자바 표준 라이브러리 중, 더 이상 필요하지 않을 때 close 메서드를 사용해서 명시적으로 닫아야 하는 리소스가 있다.
위와 같은 모든 리소스는 최종적으로 리소스에 대한 레퍼런스가 없어질 때, 가비지 컬렉터가 처리합니다.
하지만 쉽게 처리되지 않고, 느리며, 리소스 유지 비용도 많이 발생 … → Resource Leak
fun countCharactersInFile(path: String): Int {
val reader = BufferedReader(FileReader(path))
try {
return reader.lineSequence().sumOf { it.length }
} finally {
reader.close()
}
}
가독성도 좋지않고, 리소스를 닫을 때 예외가 발생할 수도 있고 … 등등
fun countCharactersInFile(path: String): Int {
val bufferedReader = BufferedReader(FileReader(path))
bufferedReader.use { reader ->
return reader.lineSequence().sumOf { it.length }
}
}
fun countCharactersInFile(path: String): Int {
BufferedReader(FileReader(path)).use { reader ->
return reader.lineSequence().sumOf { it.length }
}
}