legacy/Kotlin
-
[Kotlin] The following declarations have the same JVM signaturelegacy/Kotlin 2024. 7. 16. 16:21
1. 오류 원인Kotlin은 컴파일 시에 자바 바이트코드(.class)로 변환되기 때문에 다른 자바 파일과 호환이 되고 JVM에 의해 실행된다. 오류 메시지를 보면 JVM 시그니처가 충돌했음을 알 수 있다. 아래 코드를 보면 4개의 프로퍼티(email, password, nickName, authorities)가 존재한다. 코틀린 컴파일러는 프로퍼티에 대해서 자동으로 getter와 setter를 생성한다. 따라서 password와 authroties 프로퍼티에 대해서도 자동으로 getter가 생성된다. 여기서 한 가지 문제점이 발생하는데 현재 코드에는 UserDetails을 상속하면서 getPassword(), getAuthorities()를 오버라이딩하고 있다. 코틀린 컴파일러에 의해 자바 바이트 코드..
-
[Kotlin] sealed classlegacy/Kotlin 2024. 7. 5. 16:40
1. 등장 배경부모 클래스가 있고 자식 클래스가 3개가 존재할 때, 컴파일러 입장에서는 부모 클래스를 상속하는 클래스가 몇 개인지 알 수 없다. 1-1. 부모 클래스open class Car( val name: String, val color: String) { internal fun carInfo() { println("차의 종류는 ${name}이며 색깔은 ${color}입니다.") }} 1-2. 자식 클래스class Honda( name: String, color: String) : Car(name = name, color = color)class Hyundai( name: String, color: String) : Car(name = name..
-
[Kotlin] Accessing non-final property number in constructorlegacy/Kotlin 2024. 7. 5. 14:36
1. 상위 클래스open class Base( open val number: Int = 100) { init { println("Base Class") println("Base Class number ${number}") }} 2. 상위 클래스를 상속받는 하위 클래스class Derived( override val number: Int): Base(number) { init { println("Derived Class") println("Derived Class number : ${number}") }} 3. 하위 클래스를 인스턴스화하기fun main() { val derived = Derived(1)} 4. 의도와..
-
[Kotlin] when문을 사용하여 다양하게 처리하기legacy/Kotlin 2023. 9. 21. 21:12
코틀린에서 when절은 다른 언어에서 제공하는 switch-case문과 동일합니다.(코틀린도 제공) is 키워드와 in 키워드를 통해서 when문을 사용하는 코드를 알아봅시다. 기본적인 when문 코틀린도 다른 언어와 마찬가지로 switch-case와 동일한 기능인 when문을 제공합니다. -> 기준으로 왼쪽은 a에 해당하는 값이고 오른쪽은 왼쪽 값이 true인 경우 실행할 코드입니다. fun main() { var a: Int = 10 when(a) { 10 -> println("a = 10") else -> println("a != 10") } } in과 is를 사용하는 when문 in 키워드의 경우 when문에서만 사용할 수 있는 것이 아닌 if-else문 등 다양하게 사용할 수 있습니다. is 키..
-
[Kotlin] 동등성 비교와 동일성 비교 그리고 캐시 조회legacy/Kotlin 2023. 9. 19. 09:21
코틀린에서 "=="와 "===" 연산자를 제공합니다. "=="은 동등성 비교(값 비교)를 제공하고 "==="은 동일성 비교(참조값 비교)를 제공합니다. 얼핏 보면 쉬운 내용이면서도 헷갈리는 부분이 존재합니다. "=="와 "==="의 차이점 그리고 캐시로부터 값을 가져오는 상황을 이해해봅시다. 동등성(==) 비교 ==는 동등성 비교를 제공합니다. 아래에 num1 변수가 존재합니다. 코틀린의 특성상 참조형 변수로 선언되었지만, 컴파일 시에 참조형 -> 기본형으로 변경되어 저장됩니다. 즉 주소값을 저장하는 것이 아니라 값 그 자체를 저장하게 됩니다.(힙에 저장되는 것이 아닌 스택에 저장됨) 따라서 num1과 num2의 동일성 비교에서 true를 반환합니다. fun main() { var num1: Int = ..