아이템 09. Use를 사용하여 리소스를 닫아라

아이템 09. Use를 사용하여 리소스를 닫아라

use를 사용하여 리소스를 닫아라 #

java 의 try-with-resources 와 동일한 기능이겠다.

코틀린에서는 java의 try-with-resources 와 같은 기능으로 use, useLines 등을 사용할 수 있다.

모든 Closable 객체에 사용할 수 있다.

fun countCharactersInFile(path: String): Int {
    val reader = BufferedReader(FileReader(path))
    reader.use {
        return reader.lineSequence().sumBy { it.length }
    }
}
fun countCharactersInFile(path: String): Int {
    BufferedReader(FileReader(path)).use {
        return reader.lineSequence().sumBy { it.length }
    }
}
fun countCharactersInFile(path: String): Int {
    File(path).useLines { lines ->
        return lines.sumBy { it. length }
    }
}

useLines(파일을 한 줄씩 처리)의 경우 메모리에 파일의 내용을 한 줄씩만 유지하므로, 대용량 파일도 적절하게 처리할 수 있다. 다만 파일의 줄을 한 번만 사용할 수 있다는 단점이 있다.


요약 #

  • use를 사용하여 Closeable/AutoCloseable 을 구현한 모든 객체를 쉽고 안전하게 처리할 수 있다.
  • 파일을 처리할 때 파일을 한 줄씩 읽어 들이는 useLines를 사용하는 것이 좋다.