SEQUENCE 2

[Kotlin] 인라인(inline) 함수

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 인라인 함수를 사용하여 람다를 사용함에 따라 발생할 수 있는 성능상 부가 비용을 없앨 수 있다. 아래는 이전 글(자바 함수형(SAM) 인터페이스 활용)에서 설명한 것들이다. 코틀린은 보통 람다를 익명 클래스로 컴파일하지만, 람다 식을 사용할 때마다 새로운 클래스가 만들어지지는 않는다. 또한 람다가 변수를 캡처(포획)하면 람다가 생성되는 시점마다 새로운 익명 클래스 객체가 생긴다. 이런 경우 런타임에 익명 클래스 생성에 따른 부가 비용이 든다. 따라서 람다를 사용하는 구현은 똑같은 작업을 수행하는 일반 함수를 사용한 구현보다 덜 효율적이다. 하지만 `inline` 변경자를 어떤 함수에 붙이면..

Kotlin 2024.01.26

[Kotlin] lazy(지연) 컬렉션 연산, sequence(시퀀스)

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 이전 글에서 몇가지 컬렉션 함수를 살펴보았다. 그 함수들은 결과 컬렉션을 eagerly(즉시) 생성한다. 즉, '컬렉션 함수를 연쇄하면, 매 단계마다 연산의 중간 결과를 새로운 컬렉션에 임시로 담는다'는 의미이다. 컬렉션 함수 연쇄 (시퀀스 사용 X) data class Person(val name: String, val age: Int) people.map(Person::name).filter { it.startsWith('A') } (`people` 은 `List` 이다.) `filter` 와 `map` 은 리스트를 리턴한다. 즉, 위 코드에서는 두 함수를 연쇄 호출하여 리스트를 두 개..

Kotlin 2024.01.12