AutoCloseable
을 상속받는 Closeable
인터페이스를 구현하고 있다.
InputStream
/OutputStream
java.sql.Connection
java.io.Reader
(FileReader
, BufferedReader
, CSSParser
java.new.Socket
/java.util.Scanner
try-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 }
}
}