목록분류 전체보기 (392)
Hanbit the Developer
Kotlin Documentation 시리즈에 대해 Category: Concepts - Functions 문서 링크: https://kotlinlang.org/docs/operator-overloading.html interface IndexedContainer { operator fun get(index: Int) } class OrdersList: IndexedContainer { // operator modifier is omitted because get() overrides operator fun override fun get(index: Int) { /*...*/ } } Unary operations data class Point(val x: Int, val y: Int) operator f..
Kotlin Documentation 시리즈에 대해 Category: Concepts - Functions 문서 링크: https://kotlinlang.org/docs/inline-functions.html higher-order function는 객체이며 메모리를 추가로 할당하고 virtual call을 발생시키기 때문에 오버헤드가 발생한다. 아래 코드를 lock(l) { foo() } 아래로 치환하게 되면 이러한 오버헤드가 줄어들게 된다. 함수 객체를 파라미터로 받는 대신 컴파일러가 아래의 코드를 생성한 것이다. l.lock() try { foo() } finally { l.unlock() } 이는 아래와 같이 inline 키워드를 추가함으로써 적용할 수 있다. inline fun lock(lock..
Kotlin Documentation 시리즈에 대해 Category: Concepts - Functions 문서 링크: https://kotlinlang.org/docs/lambdas.html Higher-order functions fun postRequest(req: Request, onSuccess: (String) -> Unit) { // ... Call network with req onSuccess(result) } Function types (A, B) -> C A.(B) → C suspend () → Unit (x: Int, y: Int) → Point: 문서화를 위해 x, y라는 네이밍을 한 것임 ((Int, Int) → Int)? (Int) → ((Int) → Unit) Instanti..
Kotlin Documentation 시리즈에 대해 Category: Concepts - Functions 문서 링크: https://kotlinlang.org/docs/functions.html Function usage Variable number of arguments (varargs) fun asList(vararg ts: T): List { val result = ArrayList() for (t in ts) // ts is an Array result.add(t) return result } val list1 = asList(1, 2, 3) // Spread operator val a = arrayOf(1, 2, 3) val list2 = asList(-1, 0, *a, 4) Infix not..
Kotlin Documentation 시리즈에 대해 Category: Concepts - Classes and objects 문서 링크: https://kotlinlang.org/docs/type-aliases.html 기존에 존재하는 타입의 alternative name을 제공한다. typealias NodeSet = Set typealias FileTable = MutableMap typealias MyHandler = (Int, String, Any) -> Unit typealias Predicate = (T) -> Boolean class A { inner class Inner } class B { inner class Inner } typealias AInner = A.Inner typealia..
Kotlin Documentation 시리즈에 대해 Category: Concepts - Classes and objects 문서 링크: https://kotlinlang.org/docs/delegated-properties.html Delegated properties val/var : by class Example { var p: String by Delegate() } class Delegate { operator fun getValue(thisRef: Any?, property: KProperty): String { return "$thisRef, thank you for delegating '${property.name}' to me!" } operator fun setValue(thisRef:..
Kotlin Documentation 시리즈에 대해 Category: Concepts - Classes and objects 문서 링크: https://kotlinlang.org/docs/delegation.html interface Base { fun print() } class BaseImpl(val x: Int) : Base { override fun print() { print(x) } } class Derived(b: Base) : Base by b fun main() { val b = BaseImpl(10) Derived(b).print() } BaseImpl에서 구현된 print()를 Derived에서 그대로 사용할 수 있다.(구현 내용을 다른 클래스에 위임함) Overriding a mem..
Kotlin Documentation 시리즈에 대해 Category: Concepts - Classes and objects 문서 링크: https://kotlinlang.org/docs/object-declarations.html Object expressions 객체를 일시적으로 사용할 때 유용하다: val helloWorld = object { val hello = "Hello" val world = "World" // object expressions extend Any, so `override` is required on `toString()` override fun toString() = "$hello $world" } Inheriting anonymous objects from subtype..
Kotlin Documentation 시리즈에 대해 Category: Concepts - Classes and objects 문서 링크: https://kotlinlang.org/docs/inline-classes.html Backgrounds class Password(private val s: String) 위처럼 데이터가 한 개가 필요하지만 클래스로 wrap해야 하는 경우가 있다. 위처럼 하면 힙에 인스턴스를 추가해야 하기 때문에 오버헤드가 심하다.(primitive type일 경우에는 특히 더 심하다.) Usage value class Password(private val s: String) // To declare an inline class for the JVM backend @JvmInlin..
Kotlin Documentation 시리즈에 대해 Category: Concepts - Classes and objects 문서 링크: https://kotlinlang.org/docs/enum-classes.html enum constant는 오브젝트이며 컨마로 구분한다. enum class Direction { NORTH, SOUTH, WEST, EAST } 각각의 enum은 enum 클래스의 인스턴스이다. enum class Color(val rgb: Int) { RED(0xFF0000), GREEN(0x00FF00), BLUE(0x0000FF) } Anonymous classes enum class ProtocolState { WAITING { override fun signal() = TALK..