아이템 9 - use를 사용하여 리소스를 닫아라
ds_chanin
·2022. 3. 5. 01:30
use 메서드를 사용하면 Closeable/ AutoCloseable 를 구현한 객체를 쉽고 안전하게 처리할 수 있다.
더 이상 필요하지 않을때, close 메서드를 사용해서 명시적으로 닫아야하는 Resource들이 있다. 보통 이러한 Resource는 AutoCloseable 을 상속받는 Closeable 을 구현하고 있다.
이러한 리소스는 최종적으로 리소스에 대한 레퍼런스가 없어질 때, GC가 알아서 처리하지만 굉장히 느린 작업이고 비용이 비싸다. 그러므로 명시적으로 close 메서드를 호출해주는것이 좋은데, 자바를 사용할 때 try-with-resources를 사용했던 것 처럼 코틀린에서 use를 사용하도록 하라.
예제
use 는 아래와 같이 Closeable 를 구현한 객체에 사용할 수 있다.
fun countCharactersInFile(path: String): Int {
val reader = BufferedReader(FileReader(path))
reader.use {
return reader.lineSequence().sumBy { it.length }
}
}
파일을 한 줄씩 처리할 때는 useLines 메서드를 사용하라.
다만 파일의 줄을 한번만 사용할 수 있기 때문에 특정 줄을 2번 이상 활용하려면 파일을 두번 열어야 한다.
fun countCharactersInFile(path: String): Int {
File(path).useLines { lines ->
return lines.sumBy { it.length }
}
}
'스터디 > 이펙티브코틀린' 카테고리의 다른 글
아이템 11 - 가독성을 목표로 설계하라 (0) | 2022.03.25 |
---|---|
아이템 10 - 단위 테스트를 만들어라 (1) | 2022.03.07 |
아이템 8 - 적절하게 null을 처리하라 (0) | 2022.03.03 |
아이템 7 - 결과 부족이 발생할 경우 null과 Failure를 사용하라 (0) | 2022.03.02 |
아이템 6 - 사용자 정의 오류보다는 표준 오류를 사용하라 (0) | 2022.03.02 |