kotlin inline 3

인라인 함수: 람다의 부가 비용 없애기

인라인 함수: 람다의 부가 비용 없애기 람다가 변수를 포획하면 람다가 생성되는 시점마다 새로운 무명 클래스 객체가 생긴다. 이런경우, 실행 시점에 무명 클래스 생성에 따른 부가 비용이 든다. → 똑같은 작업을 수행하는 일반 함수를 사용한 구현보다 덜 효율적 inline 변경자 컴파일러는 그 함수를 호출하는 모든 문장을 함수 본문에 해당하는 바이트 코드로 바꿔치기 해준다. 작동 방식 함수를 호출하는 코드를 함수를 호출하는 바이트코드 대신에 함수 본문을 번역한 바이트 코드로 컴파일한다. [Kotlin in Action 책] p.365 8.13~8.3 synchronized 함수의 본문뿐 아니라 전달된 람다의 본문도 함께 인라이닝 된다. 함수 타입의 변수를 넘길수도 있다. fun runUnderLock(bod..

코틀린 타입 종류 Null가능성

타입 시스템코틀린의 타입 시스템은 코드의 가독성을 향상시키는데 도움이되는 몇가지 특성을 새로 제공널 가능성 (nullability)NullPointerException오류를 피할 수 있게 돕기 위한 코틀린 타입 시스템의 특성null에 대한 접근 방법을 실행시점 → 컴파일 시점널이 될 수 있는 타입 (nullable type)타입 시스템이 널이 될수 있는 타입을 명시적으로 지원타입 이름 뒤에 물음표(?)를 명시fun strLenSafe(s: String?) = ... null과 비교하고 나면 컴파일러는 그 사실을 기억하고, 해당 값을 널이 될 수 없는 타입의 값처럼 사용할 수 있다.fun strLenSafe(s: String?) : Int = if(s != null) s.length else 0 자바에서 ..

[Kotlin] inline함수 reified키워드

# 람다의 패널티 고차 함수에 람다를 사용할 경우 런타임 시 특정 패널티가 발생한다, 라는 문구로 코틀린의 '인라인 함수' 참조 문서는 시작한다. 람다를 사용하면 각 함수는 객체로 변환되어 메모리 할당과 가상 호출 단계를 거치게 되는데, 이는 런타임 오버헤드를 초래한다는 것이다. # inline function 인라인(inline) 키워드는 자바에서는 제공하지 않는 코틀린만의 키워드입니다. 람다를 매개 변수로 사용하는 고차 함수를 '인라인 함수(Inline Function)'로 정의하여 오버 헤드를 줄일 수 있는 방법을 제공하고 있다. 인라인 함수로 정의된 함수는 컴파일 단계에서 호출하는 방식이 아니라 코드 자체가 복사되는 방식으로 컴파일 된다. # 람다식을 사용했을 대 무의미한 객체 생성을 예방 인라인..

안드로이드 2022.08.30