Kotlin53 [Kotlin in Action] 8.2 인라인 함수: 람다의 부가 비용 없애기 8.2.1 인라이닝이 작동하는 방식어떤 함수를 inline으로 선언하면 그 함수의 본문이 인라인된다. 다른 말로 하면 함수를 호출하는 코드를 함수를 호출하는 바이트코드 대신에 함수 본문을 번역한 바이트 코드로 컴파일한다는 뜻이다. 8.2.2 인라인 함수의 한계인라이닝을 하는 방식으로 인해 람다를 사용하는 모든 함수를 인라이닝할 수는 없다. 함수가 인라이닝될 때 그 함수에 인자로 전달된 람다 식의 본문은 결과 코드에 직접 들어갈 수 있다. 하지만 이렇게 람다가 본문에 직접 펼쳐지기 때문에 함수가 파라미터로 전달받은 람다를 본문에 사용하는 방식이 한정될 수밖에 없다. 함수 본문에서 파라미터로 받은 람다를 호출한다면 그 호출을 쉽게 람다 본문으로 바꿀 수 있다. 하지만 파라미터로 받은 람다를 다른 변수에 저.. 2025. 4. 2. [Kotlin] 코틀린과 자바에서의 익명 함수와 람다 차이 1. 코틀린에서의 익명 함수와 람다 표현식문법 차이람다 표현식:중괄호 {} 안에 파라미터와 본문을 작성하며, 파라미터와 본문은 -> 기호로 구분한다.예시:{ x: Int -> x * 2 }익명 함수:fun 키워드를 사용하여 이름 없이 정의하며, 일반 함수와 동일한 문법을 따른다.예시:fun(x: Int): Int { return x * 2 }메모리에서의 동작 원리람다 표현식:외부 변수를 참조하면 클로저(closure)가 생성된다.클로저는 캡쳐된 변수들을 함께 보관하며, 이 변수들은 힙 메모리에 할당된다.만약 외부 변수를 캡쳐하지 않는다면, 컴파일러는 인라인이나 싱글톤 형태로 최적화하여 불필요한 객체 생성을 줄인다.익명 함수:익명 함수도 외부 변수를 참조하면 클로저가 생성될 수 있다.그러나 문법이 일반 함.. 2025. 4. 1. [Kotlin] object는 어떻게 자바로 디컴파일 되는가 object Member { private const val name: String = "John Park" val age: Int? = 22 var address: String = "Seoul" fun sayHello() { println("Hello, $name!") }}이러한 Kotlin코드는 아래와 같은 Java 코드로 변환된다.public final class Member { @NotNull public static final Member INSTANCE = new Member(); @NotNull private static final String name = "John Park"; @Nullable private static fina.. 2025. 3. 27. [Kotlin in Action] 8.1 고차 함수 정의 고차 함수는 다른 함수를 인자로 받거나 함수를 반환하는 함수다. 코틀린에서는 람다나 함수 참조를 사용해 함수를 값으로 표현할 수 있다. 따라서 고차 함수는 람다나 함수 참조를 인자로 넘길 수 있거나 람다나 함수 참조를 반환하는 함수다. 예를 들어, 표준 라이브러리 함수인 filter는 술어 함수를 인자로 받으므로 고차 함수다.list.filter { x > 0 } 8.1.1 함수 타입val sum = { x: Int, y: Int -> x + y }val action = { println(42) }이 경우 컴파일러는 sum과 action이 함수 타입임을 추론한다. 각 변수에 구체적인 타입 선언을 추가하면 어떻게 될까.val sum: (Int, Int) -> Int = { x, y -> x + y }va.. 2025. 3. 27. [Kotlin in Action] 7.5 프로퍼티 접근자 로직 재활용: 위임 프로퍼티 위임 프로퍼티(delegated property)를 사용하면 값을 뒷받침하는 필드에 단순히 저장하는 것보다 더 복잡한 방식으로 작동하는 프로퍼티를 쉽게 구현할 수 있다. 또한 그 과정에서 접근자 로직을 매번 재구현할 필요도 없다. 예를 들어, 프로퍼티는 위임을 사용해 자신의 값을 필드가 아니라 데이터베이스 테이블이나 브라우저 세션, 맵 등에 저장할 수 있다.이런 특성의 기반에는 위임이 있다. 위임은 객체가 직접 작업을 수행하지 않고 다른 도우미 객체가 그 작업을 처리하게 맡기는 디자인 패턴을 말한다. 이 때 작업을 처리하는 도우미 객체를 위임 객체(deletgate)라고 부른다. 7.5.1 위임 프로퍼티 소개// 위임 프로퍼티의 일반적인 문법class Foo { var p: Type by Deleg.. 2025. 3. 27. 이전 1 2 3 4 5 6 ··· 11 다음