본문 바로가기

Language/Kotlin

(14)
코틀린[Kotlin]에서 Delegated properties 사용하기 위임된 프로퍼티 (Delegated properties) Kotlin은 특정 객체에 대한 프로퍼티의 set과 get 메서드의 호출을 위임할 수 있는 Delegated properties 메커니즘을 제공합니다. 이 경우 delegate 객체에는 getValue 메서드가 있어야 합니다. 변경 가능한 프로퍼티의 경우 setValue도 필요합니다. import kotlin.reflect.KProperty class Example { var p: String by Delegate() // 1 override fun toString() = "Example Class" } class Delegate() { operator fun getValue(thisRef: Any?, prop: KProperty): String ..
코틀린[Kotlin]에서 Delegation 패턴 사용하기 Delegation 디자인 패턴에서 Delegate Pattern은 어떤 기능을 자신이 처리하지 않고 다른 객체에 위임을 시켜 그 객체가 일을 처리하도록 하는 것입니다. Delegate은 사전적 정의로 위임하다. 대표자 라는 뜻입니다. Derived 클래스는 모든 public 멤버를 지정된 객체에 위임하여 Base 인터페이스를 구현할 수 있습니다. 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() } Derived의 ..
코틀린의[Kotlin] Scope 함수 Scope functions 코틀린 표준 라이브러리에는 객체 컨텍스트 내에서 코드 블록을 실행하는 것이 유일한 목적인 여러 함수가 포함되어 있습니다. 람다 표현식이 제공된 객체에서 이러한 함수를 호출하면 임시 범위가(scope) 형성됩니다. 이 범위에서는 이름 없이 객체에 접근할 수 있습니다. 이러한 기능을 scope functions이라고 합니다. let, run, with, apply, also의 다섯 가지가 있습니다. 기본적으로, 이 함수들은 동일한 역할을 합니다: 객체에 코드 블럭을 실행하는 것입니다. 다른 점은, 이 객체를 어떤 방식으로 블럭 안에서 사용할 수 있는지, 그리고 전체 표현식(expression)의 결과가 어떻게 되는지입니다. 아래는 전형적인 scope function의 사용법입니다..
코틀린[Kotlin] Collections에서 자주 사용하는 함수 알아보기 (Filter, map, count, groupby ....) 지난번에 코틀린 collections에 대해 알아본 것에 이어서 컬렉션에서 자주 사용하는 함수들에 대해 알아보겠습니다. 함수들에 대해서 알면 알수록 개발이 편해지는 것 같습니다. 이런 상황에선 이걸 쓰고, 저런 상황에서는 저걸 쓰고 등등등 filter Filter 함수를 사용하면 컬렉션을 필터링할 수 있습니다. 필터는 컬렉션의 각 요소에 적용됩니다. 조건을 true로 만드는 값 들이 결과 컬렉션에 담겨 반환됩니다. val numbers = listOf(1, -2, 3, -4, 5, -6) // 1 val positives = numbers.filter { x -> x > 0 } // 2 val negatives = numbers.filter { it < 0 } // 3 숫자 컬렉션을 정의합니다. 양수를 ..
코틀린[Kotlin] 컬렉션(Collections) 알아보기 (List, Map, Set ...) 이번에는 코틀린의 컬렉션에 대해서 알아보겠습니다. 컬렉션에는 일반적으로 동일한 타입의 여러 객체를 담을 때 사용합니다. 예를 들어, 한 부서의 모든 개발자의 평균 연령을 계산하는 데 사용할 수 있는 컬렉션을 구성할 수 있습니다. 다음 컬렉션 타입들이 Kotlin과 관련이 있습니다. List 리스트는 위치를 반영하는 정수인 인덱스로 데이터에 접근할 수 있는 순서가 있는 컬렉션입니다. 데이터는 리스트에서 두 번 이상 나타날 수 있습니다. 리스트의 예는 전화번호입니다. 전화번호 부는 번호들의 그룹이고, 번호들의 순서가 중요하며, 번호가 반복될 수 있습니다. Kotlin에서 리스트는 변경 가능할 수 있거나(MutableList) 읽기 전용(List)일 수 있습니다. 리스트 생성을 위해 읽기 전용 리스트에는 표준..
코틀린[Kotlin] 함수형 프로그래밍 (고차 함수, 람다 함수, 확장 함수) 이번엔 함수형 프로그래밍을 코틀린에서 어떻게 사용할 수 있는지 알아보겠습니다. 고차 함수 (Higher-Order Functions) 고차 함수는 다른 함수를 매개변수로 취하거나 함수를 반환하는 함수입니다. 일급 객체란? Kotlin 함수는 일급 객체(First-class citizen)입니다. 아래 3가지 조건을 충족한다면 1급 객체라고 할 수 있습니다. 변수나 데이터에 할당할 수 있어야 한다. 객체의 인자로 넘길 수 있어야 한다. 객체의 리턴값으로 반환할 수 있어야 한다. 함수를 매개변수로 사용하기 fun calculate(x: Int, y: Int, operation: (Int, Int) -> Int): Int { // 1 return operation(x, y) // 2 } fun sum(x: I..
코틀린[Kotlin] 특별한 클래스들 (Data, Enum, Sealed Classes And Object) 이번엔 코틀린에서 지원하는 특별한 클래스들에 대해서 다뤄볼 것입니다. 코틀린 공식문서를 참고해 작성했습니다. Data Classes 데이터 클래스를 사용하면 값을 저장하는 데 사용되는 클래스를 쉽게 만들 수 있습니다. 이러한 클래스에는 복사하기(copy), 문자열 표현 가져오기(toString) 및 컬렉션의 인스턴스 사용을 위한 메서드가 자동으로 제공됩니다. data class User(val name: String, val id: Int) { // 1 override fun equals(other: Any?) = other is User && other.id == this.id // 2 } fun main() { val user = User("KimSo", 1) // User(name=KimSo, id..
코틀린[Kotlin] 흐름 통제하기 (When, Loop, Ranges, Equality, Contidional ..) 코틀린으로 반복문, 조건문 등을 어떻게 사용하는지 알아보겠습니다~! 코틀린 공식 문서를 참고했습니다. When 자바에서서 사용되는 switch문 대신에 Kotlin은 When으로 구성할 수 있습니다. When을 선언문이나 표현식으로 사용할 수 있습니다. When 선언문 fun main() { cases("Hello") cases(1) cases(0L) cases(MyClass()) cases("hello") } fun cases(obj: Any) { when (obj) { // 1 1 -> println("One") // 2 "Hello" -> println("Greeting") // 3 is Long -> println("Long") // 4 !is String -> println("Not a stri..