Kotlin
-
Kotlin) lateinit과 lazy 특징과 차이점Kotlin 2020. 12. 22. 13:56
코틀린에서 변수 선언을 먼저하고 초기화를 지연하는 기능들인 lateinit과 lazy가 있습니다. 초기화를 지연하면 사용할지 모르는 데이터를 미리 초기화할 필요가 없기 때문에 성능 향상에 도움 됩니다. lateinit 변경 가능한 var에서만 사용할 수 있습니다. primitive type에 적용할 수 없습니다. (primitive type = In,t Boolean, Long, Double.. 코틀린에서 제공하는 기본적인 타입) nullable에서 사용할 수 없습니다. 필요할 때 지연했던 초기화를 초기화하고 사용 할 수 있습니다. 초기화 하지 않고 실행하게 되면 Exception이 발생합니다. lazy 변경 불가한 val에서만 사용할 수 있습니다. primitive type에 적용가능합니다. nulla..
-
Kotlin) 코틀린 inner 클래스 알아보기Kotlin 2020. 12. 18. 20:30
inner 클래스를 알아보기 이전에 중첩(nested) 클래스를 알아보는 것이 좋습니다. Nested Class(중첩 클래스) class OuterClass { class NestedClass { } } 위와 같이 외부 OuterClass 내부에 내부 클래스로 NestedClass가 있는 형태입니다. Static Nested Class(정적 중첩 클래스) 정적 중첩 클래스는 외부 클래스(OuterClass)의 지역변수에 접근이 불가능합니다. 외부에서 OuterClass의 NestedClass의 객체 생성이 가능합니다. fun main(args: Array) { val staticNested = OuterClass.StaticNestedClass() staticNested.printItems() } cla..
-
Kotlin) 코틀린 infix 키워드 알아보기Kotlin 2020. 12. 15. 23:54
infix 두 개의 변수 가운데 오는 함수를 말합니다. 대표적으로 to 가 있습니다. to를 사용하여 key와 value가 매핑됩니다. 코드를 간결하고 가독성을 높게 만들어 줄 수 있습니다. Usage val numbersMap = mapOf("1" to "one", "2" to "two", "3" to "three") val numbersMap2 = mapOf(Pair("1", "one"), Pair("2", "two"), Pair("3", "three")) infix Fuction infix 키워드는 함수에서도 선언 가능합니다. infix fun dispatcher.함수 이름(receiver) : 리턴 타입 { 구현부 } 로 선언할 수 있습니다. dispatcher : infix 함수 전에 오는 객체..
-
Kotlin) 코틀린 Collection - List, Map, Set 사용법Kotlin 2020. 12. 15. 23:37
코틀린의 Collection 코틀린의 Collection은 Mutable(가변의), Immutable(불변의)을 제공합니다. Mutable은 데이터의 추가, 삭제가 가능합니다. Immutable은 데이터의 수정이 불가합니다. List 기본적으로 Immutable List의 listOf(Data) 형태와 Mutable List의 mutableListOf(Data) 형태로 선업합니다. 코틀린은 타입 추론을 하기 때문에 Type이 생략 가능합니다. (변수 타입 생략 가능) 또한 스마트 캐스팅을 통해 컴파일과 동시에 타입이 결정됩니다. (자동으로 타입 캐스팅) Usage // List val fruits = listOf("apple", "banana", "kiwi") println("fruits.size: $f..
-
Kotlin) inline 함수와 고차함수 알아보기Kotlin 2020. 12. 15. 12:45
고차함수(Higher order fuctions) 인자가 함수이거나 함수를 리턴하는 함수 코틀린에서 고차함수를 사용하면 추가적인 메모리 할당 및 함수호출로 Runtime overhead가 발생합니다. fun someMethod(a: Int, func: () -> Unit): Int { func() return 2 * a } fun main(args: Array) { var result = someMethod(2) { println("Just some dummy fuction") } println(result) } inline 개념 inline fuctions는 내부적으로 함수 내용을 호출되는 위치에 복사하며, 고차함수의 Runtime overhead를 줄여줍니다. 컴파일하는 동안 해당 함수의 모든 사용 ..
-
Kotlin) 코틀린 ::class.java와 리플렉션(Reflection)Kotlin 2020. 12. 14. 17:35
MainActivity::class MainActivity::class.java 코틀린에서 액티비티를 넘길 때 .java를 붙여 코드를 작성하는 것을 볼 수 있습니다. 그 이유는 자바에서 쓰는 클래스와 코틀린에서 쓰는 클래스가 다르기 때문입니다. 자바에서는 Class를 리턴하는 반면, 코틀린에서는 클래스명::class를 하게 되면 KClass를 리턴합니다. 그렇기 때문에 KClass를 Class로 바꿔줘야 하는데 이때 .java를 붙여 자바 클래스 값을 받습니다. 리플렉션(Reflection) 코드를 작성하는 시점에 런타임상 컴파일 된 바이트 코드에서 내가 작성한 코드가 어디에 위치하는지 알 수 없습니다. 그래서 바이트 코드를 이용해 내가 참조하려는 값을 찾기위해 사용됩니다. 코틀린에서 더블콜론을 이용해..
-
Kotlin) 코틀린 안드로이드 익스텐션 폐기 - Android Kotlin Extensions Will be removed in a futureKotlin 2020. 12. 8. 00:04
Kotlin Android Extensions 대표적인 기능으로 아래의 기능을 제공합니다. Synthetics: findViewById를 대체하는 kotlinx.android.synthetic 바인딩. 해당 View의 id를 바로 참조하여 사용가능한 기능 btnGo.setOnClickListener { TODO() } Parcelize: 직렬화/역직렬화 Serializable의 장점과 Parcelable의 보일러 플레이트 코드를 덜어내고 성능상 이점을 가진 기능 @Parcelize 어노테이션과 Parcelable을 구현해주기만 하면 사용할 수 있습니다. import android.os.Parcelable import kotlinx.android.parcel.Parcelize @Parcelize data ..