1. 오류 원인Kotlin은 컴파일 시에 자바 바이트코드(.class)로 변환되기 때문에 다른 자바 파일과 호환이 되고 JVM에 의해 실행된다. 오류 메시지를 보면 JVM 시그니처가 충돌했음을 알 수 있다. 아래 코드를 보면 4개의 프로퍼티(email, password, nickName, authorities)가 존재한다. 코틀린 컴파일러는 프로퍼티에 대해서 자동으로 getter와 setter를 생성한다. 따라서 password와 authroties 프로퍼티에 대해서도 자동으로 getter가 생성된다. 여기서 한 가지 문제점이 발생하는데 현재 코드에는 UserDetails을 상속하면서 getPassword(), getAuthorities()를 오버라이딩하고 있다. 코틀린 컴파일러에 의해 자바 바이트 코드..
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..
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. 의도와..
코틀린에서 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 키..
코틀린에서 "=="와 "===" 연산자를 제공합니다. "=="은 동등성 비교(값 비교)를 제공하고 "==="은 동일성 비교(참조값 비교)를 제공합니다. 얼핏 보면 쉬운 내용이면서도 헷갈리는 부분이 존재합니다. "=="와 "==="의 차이점 그리고 캐시로부터 값을 가져오는 상황을 이해해봅시다. 동등성(==) 비교 ==는 동등성 비교를 제공합니다. 아래에 num1 변수가 존재합니다. 코틀린의 특성상 참조형 변수로 선언되었지만, 컴파일 시에 참조형 -> 기본형으로 변경되어 저장됩니다. 즉 주소값을 저장하는 것이 아니라 값 그 자체를 저장하게 됩니다.(힙에 저장되는 것이 아닌 스택에 저장됨) 따라서 num1과 num2의 동일성 비교에서 true를 반환합니다. fun main() { var num1: Int = ..