reified 2

[Kotlin] 런타임 시 제네릭의 동작: 타입 소거(Type erasure), reified 타입 파라미터

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 런타임의 제네릭: 타입 소거(type erasure) 자바와 마찬가지로 코틀린 제네릭 타입 인자 정보는 런타임에 지워진다. 제네릭 인스턴스가 생성될 때 쓰인 타입 인자에 대한 정보를 유지하지 않는다. 예를 들어 `List` 객체를 만들더라도, 런타임에는 그 객체를 오직 `List` 로만 볼 수 있다. 즉, 그 `List` 객체가 어떤 타입의 원소를 저장하는지 런타임에는 알 수 없다. 이를 타입 소거 (type erasure) 라고 한다. 런타임에 둘은 완전히 같은 타입의 객체이다. 하지만 컴파일러가 타입 인자를 알고 올바른 타입의 값만 각 리스트에 넣도록 보장해주기 때문에 `List` 에..

Kotlin 2024.01.31

[Kotlin] 인라인(inline) 함수

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

Kotlin 2024.01.26