더북(TheBook)

2.11 사용한 자원 자동으로 닫기

자바에서 자원을 사용하는 try로 할 수 있는 것처럼 코틀린도 자원을 자동으로 닫을 수 있다. 이때 자원은 Closable이나 AutoClosable 중 하나를 구현해야 한다. 자바와 코틀린의 가장 큰 차이는 코틀린에서는 use라는 함수를 사용한다는 점이다.

import java.io.File // 임포트해야만 File을 사용할 수 있음

File("myFile.txt").inputStream()
                  .use {
                     it.bufferedReader()
                       .lineSequence()
                       .forEach (::println)
                  }

이 코드는 단지 자동으로 닫을 수 있는 자원을 어떻게 처리하는지 보여주는 예제일 뿐이다. 자원 처리를 제외하면 코드 자체는 그리 흥미로운 부분이 없다. lineSequence 함수는 Sequence를 반환하는데, 이는 지연 계산 컬렉션이다. 지연(lazy) 계산이란 말은 계산(파일에서 매 줄을 읽어오기)이 나중에 실제 각 줄을 사용할 때 이뤄진다는 뜻이다. 여기서는 시퀀스 안의 각 줄이 실제 사용될 때(forEach에 의해 각 줄을 출력할 때) 계산이 이뤄진다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.