Programming/Kotlin

    [Kotlin] Jvm Prefix Annotation 5가지 파헤치기

    코틀린은 자바와의 상호 운용을 중요하시하는 언어이다. 따라서 JVM 상에서 두 언어의 유연함을 가지기 위해 Jvm Prefix Annotation을 제공한다. 주로 사용하는 5가지 Annotation에 대해 알아보자. JvmField JvmStatic JvmOverloads JvmName JvmSynthetic 1. JvmField 코틀린에는 프로퍼티라는 개념이 존재하지만, 자바에서는 필드라는 개념이 존재한다. 즉, 자동으로 getter/setter를 만들어주지 않는다. 따라서 코틀린의 프로퍼티를 자바에서 필드처럼 사용하고 싶다면 @JvmField 어노테이션을 사용한다. class Person { @JvmField var name: String = "John Doe" } // 자바 코드에서 호출 Pers..

    [Kotlin] Value Class (inline class deprecated)

    Kotlin 1.6 버전부터 value class가 도입되었습니다. 이전 버전에서는 data class를 통해 유사한 효과를 얻을 수 있었지만, 데이터 클래스는 추가적인 객체 생성과 메모리 할당이 필요한 문제가 있었습니다. value class가 추가되면서, 객체 생성 및 메모리 할당을 최소화하고 성능을 개선할 수 있게 되었습니다. Kotlin 1.5에서는 inline class라는 키워드를 사용하였지만 1.6 버전으로 업그레이드되면서 value class가 등장하고 inline class는 Deprecated 되었습니다. 그 이유는 Kotlin 팀에서는 inline class를 대신하기 위해 value class를 도입하였기 때문입니다. 해당 포스팅에서는 value class가 무엇인지와 장점에 대해 ..

    [Kotlin] val a: Int = 1000과 val b: Int = 1000은 다르다

    (우아한테크코스 미션 피드백을 듣다가 한 가지 새로운 사실을 알게 되어 정리합니다.) Kotlin은 정수를 나타내는 타입으로 Int와 Integer가 있습니다. 이 둘의 차이는 Int는 primitive type이지만 Integer는 reference type이라는 점입니다. 이 둘의 존재로 인해, 동등성과 동일성을 비교해야 하는 상황에서 어떠한 차이가 발생하는지 알아보겠습니다. isEqualTo() 메서드는 동등성을 비교합니다. (객체의 내용이 같음) isSameAs() 메서드는 동일성을 비교합니다. (메모리 주소가 같음) @Test fun test1() { val actual: Int = 1 val expected: Int = 1 assertThat(actual).isEqualTo(expected) ..

    [Kotlin] const val vs val - 둘의 차이점은 무엇일까?

    최근 우아한테크코스에서 코틀린에 대해 공부하면서 상수를 관리할 때 companion object(동반 객체) 내에 필요한 상수를 선언하는 일이 자주 있었습니다. 단순히 상수이기 때문에 val 키워드를 사용하면 된다고 생각했지만, IDE에서는 이 방식을 추천하지 않았습니다. val만 사용하여 상수를 선언하면, Might be 'const'라는 문구가 나타나면서 노란 줄로 경고가 나타납니다. 여기서 IDE가 추천해주는 방식을 따르면 const 키워드가 추가로 붙게 됩니다. 이 둘에 어떤 차이가 있는지 알아본 바로는, const val는 컴파일 시점에 값을 할당하는 반면, val는 런타임 시점에 값을 할당한다는 차이가 있습니다. 많은 레퍼런스를 참조해봤지만 대부분 이 둘에 대한 차이밖에 찾을 수 없었으며, K..