더북(TheBook)

for 루프의 진정한 매력은 컴파일러가 수 범위나 컬렉션 등 몇 가지에 대한 용례만 지원하지 않고 다양한 값에 대한 루프를 수행할 수 있는 통일된 메커니즘을 제공한다는 점에 있다. 어떤 컨테이너를 for 루프에 사용하기 위해서는 컨테이너가 iterator() 함수를 지원하기만 하면 된다. 이 iterator() 함수는 원소 값을 추출하는 기능을 제공하는 이터레이터(Iterator 타입)를 반환한다. 이에 대한 구체적인 내용은 7장 컬렉션과 I/O 자세히 알아보기에서 살펴보고, 지금은 여러 표준 코틀린 타입이 이런 이터레이터를 기본으로 제공한다는 점만 알면 된다. 그래서 진행, 배열, 문자열 등에 대해 for 루프를 쓸 수 있다. 그리고 나중에 보겠지만, 확장(extension) 메커니즘을 사용하면 원하는 어떤 타입이든 iterator() 함수를 덧붙일 수 있기 때문에 여러분이 원하는 모든 타입을 확장해서 for 루프로 반복하게 만들 수 있다.

자바 vs. 코틀린 자바 for-each 루프는 Iterable의 모든 하위 타입에 사용할 수 있다는 점에서 코틀린 for 문과 비슷하다. 하지만 컨테이너가 특정 타입일 필요가 없으므로 코틀린의 for 루프 관례가 더 유연하다. 단지 어떤 타입이 iterator()라는 함수를 제공하기만 하면 for 루프를 사용할 수 있다.

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