코틀린에서는 IO 자원에 대하여 확장함수를 통해 편하게 관리할수 있다.
use 혹은 useLine으로 scope를 감싸고 이용하면 모든 상황에 대해 close를 보장한다.
File("/home/user/file/test.txt").useLines { // 내부적으로 sequence<string> 형태로 핸들링
println(it)
}
Socket().use {
it.getInputStream().use {
it.readAllBytes()
}
}
ByteArrayOutputStream().use {
println(it.size())
}
자바에서는 이러한 기능이 없기 때문에 직접 try, catch, finally를 이용해왔다.
코드 라인이 길어지고 지저분한점이 있으나 무엇보다도 finally안에서도 오류가 발생할수 있는것이다.
이러한 모든 경우를 고려하여 코드를 작성하면 괴로울정도로 지저분해질수가 있다.
그래서 코틀린에서는 이런 고민을 해결하기위해 use 확장 함수가 등장하였다. (고맙습니다)