목록Kotlin/Kotlin vs Java (4)
시배's Android
import kotlin.reflect.KProperty fun main(){ val test : Int by LoggingProperty(100) println(test) } class LoggingProperty (var value : T) { operator fun getValue( thisRef : Any?, prop : KProperty ) : T { println("${prop.name} returned value $value") return value } operator fun setValue( thisRef : Any?, prop : KProperty, newValue : T ) { val name = prop.name println("$name changed from $value to $..
Open Keyword Kotlin에서 클래스나 메서드를 상속 가능하게 하려면 open 키워드를 사용해야 합니다. 이는 Liskov Substitution Principle(LSP)를 준수하기 위한 것입니다. LSP는 서브타입(subtype)이 슈퍼타입(super type)을 대체할 수 있어야 한다는 원칙으로, 이를 위해서는 서브타입에서는 슈퍼타입의 모든 규칙을 따라야 합니다. 예를 들어, Animal 클래스를 살펴봅시다. open class Animal { open fun bark(){ println("animal") } fun test(){ println("test") } } 여기서 open 키워드는 이 클래스를 상속 가능하게 만듭니다. bark() 메서드 또한 open 키워드를 통해 서브클래스에서 ..
fun main(){ val name = "si8ae" val welcome = "Hello, $name" println(welcome) } Kotlin에서는 문자열 템플릿을 사용하여 문자열을 쉽게 결합할 수 있습니다. 위 코드와 같이 name이라는 변수를 문자열 템플릿을 이용하여 welcome 변수를 초기화하면 자바에서는 어떻게 구현이 되는지 살펴보겠습니다. public static final void main() { String name = "si8ae"; String welcome = "Hello, " + name; System.out.println(welcome); } 자바에서는 단순한 문자열 연결(+)로 변환되는 것을 확인할 수 있습니다.
data class Person( val age : Int, val name : String ) 위 코드는 'Person'이라는 이름의 Data Class를 선언한 것입니다. 이 클래스는 두 개의 프로퍼티를 가지고 있습니다: 'age'와 'name'. 이제 이 코드를 자바로 디컴파일하면 어떤 형태로 변환되는지 살펴보겠습니다. @Metadata( mv = {1, 9, 0}, k = 1, d1 = {"\u0000 \n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0000\n\u0002\u0010\b\n\u0000\n\u0002\u0010\u000e\n\u0002\b\u000b\n\u0002\u0010\u000b\n\u0002\b\u0004\b\u0086\b\u0018\u00002..