kotlin (3) 썸네일형 리스트형 코틀린 확장 함수 코틀린에는 기존 클래스를 상속받지 않고도 기능을 추가할 수 있는 확장 함수라는 기능이 있습니다. String 과 같이 final class 와 같이 상속이 불가능한 클래스도 확장 함수를 사용하면 기능을 추가할 수 있습니다. 이 글에서는 코틀린의 확장 함수가 어떤 방식으로 자바 코드로 변환되는지 확인 해보겠습니다 테스트 코드(ExtensionFunctionTest.kt) fun String.lastChar() = this.get(this.length - 1) 테스트 코드(Executor.kt) fun main() { val ext = "Extension Function" ext.lastChar() } String 클래스에 lastChar() 라는 확장 함수를 만드는 코드입니다. 이렇게 확장 함수를 만들면 .. lateinit 과 by lazy 분석 lateinit 과 by lazy 모두 지연 초기화를 위해 사용되는 것으로만 알고 있었고, lateinit 은 var 에만 사용할 수 있고 by lazy 는 val 에만 사용할 수 있다 정도만 알고 있었습니다.. 어떻게 동작하는지는 관심이 없었는데 시간이 나서 이번 기회에 내부적으로 각각 어떻게 내부적으로 동작하는지를 알고 싶어서 분석하게 되었습니다. 1. lateinit 테스트 코드 class LateinitTest { private lateinit var name: String fun test() { println(name) } } 위의 코드를 자바로 변환하면 아래와 같은 자바 코드가 보입니다. lateinit 의 동작 방식을 간단히 말하면 lateinit 으로 선언된 프로퍼티에 접근하면 내부적으로 .. by Delegates.observable 동작 방식 class ObservableClass { var stringProperty: String by Delegates.observable("INITIAL_VALUE") { prob, oldValue, newValue -> println("기존값: $oldValue, 새로운 값: $newValue") } } val observableClass = ObservableClass() observableClass.stringProperty = "first change" observableClass.stringProperty = "second change" 위 코드를 java 코드로 디컴파일을 해보면 아래와 같이 동작한다 /* * 1. ReadWriteProperty를 상속받은 ObservableProperty를 상속.. 이전 1 다음