-
9장 - use를 사용하여 리소스를 닫아라Kotlin/Effective Kotlin 요약 2023. 1. 25. 00:01728x90
close 메서드를 사용해서 명시적으로 닫아야 하는 리소스들
- InputStream, OutputStream
- sql.Connection
- java.io.Reader
- Socket과 Scanner
보통 이런 리소스들은 AutoCloseable을 상속받는 Closeable 인터페이스를 구현하고 있습니다.
전통적으로 이런 리소스는 다음과 같이 try-finally 블록을 사용해서 처리합니다.
var socket: Socket? = null var inputStream: InputStream? = null var reader: InputStreamReader? = null try { socket = Socket("thdev.tech", 80) inputStream = socket.getInputStream() reader = InputStreamReader(inputStream) println(reader.readText()) } catch (e: Exception) { // ... } finally { socket?.close() inputStream?.close() reader?.close() }
하지만 이런 경우 리소스를 닫을 때 예외가 발생할 수 있는데 이런 예외는 따로 처리하지 않기 때문에 좋지 않습니다.
코틀린에서는 use함수를 제공하며 이를 사용하면 Closeable/AutoCloseable을 구현한 객체를 쉽고 안전하게 처리할 수 있습니다.
또한 파일을 한줄씩 읽어오는 useLines를 사용하면 대용량 파일이라도 한 줄씩만 메모리에 올라가서 효율적으로 사용할 수 있습니다.
CustomResource 구현해보기
fun main() { val customResource = CustomResource() customResource.use{ it.doSomething() } } class CustomResource : AutoCloseable{ fun doSomething(){ println("do Something") } override fun close() { println("close") } }
출력 결과
728x90'Kotlin > Effective Kotlin 요약' 카테고리의 다른 글
11장 - 가독성을 목표로 설계하라 (0) 2023.02.09 10장 - 단위 테스트를 만들어라 (0) 2023.01.26 8장 - 적절하게 null을 처리하라 (0) 2023.01.24 7장 - 결과 부족이 발생할 경우 null과 Failure를 사용하라 (0) 2023.01.22 6장 - 사용자 정의 오류보다는 표준 오류를 사용하라 (0) 2023.01.21