AutoCloseable을 상속받는 Closeable 인터페이스를 구현하고 있다.
InputStream/OutputStreamjava.sql.Connectionjava.io.Reader(FileReader, BufferedReader, CSSParserjava.new.Socket/java.util.Scannertry-finally 블록으로 처리했다.fun countCharacterInFile(path: String): Int {
val reader = BufferedReader(FileReder(path))
try {
return reader.lineSequence().sumBy { it.length }
} finally {
reader.close()
}
}
try-finally 블록은 복잡하고 좋지 않다.
try와 finally 블록 내부에서 오류가 발생하면 둘 중 하나만 전파된다.use를 사용하면 모든 오류를 전파시킬 수 있다.fun countCharacterInFile(path: String): Int {
val reader = BufferedReader(FileReder(path))
reader.use {
return reader.lineSequence().sumBy { it.length }
}
}
reader)가 전달되는 형태도 있다.fun countCharacterInFile(path: String): Int {
BufferedReader(FileReader(path)).use { reader ->
return reader.lineSequence().sumBy { it.length }
}
}
useLines 함수도 제공한다.
fun countCharacterInFile(path: String): Int {
File(path).useLines { lines ->
return lines.sumBy { it.length }
}
}