728x90
반응형

2023/09 8

멤버참조 in Kotlin

함수, 프로퍼티, 생성자에 대해서 호출하는 뻔한 람다를 대신할 수 있다. 사용법은 클래스 이름과 콜론 2개를 연결시켜 사용하면 된다. 관련된 내용은 아래 예제를 통해 확인해 볼 수 있다. data class Message( val sender: String, val text: String, val isRead: Boolean ) fun propertyReferenece() { val messages = listOf( Message("Kitty", "Hey!", true), Message("Kitty", "Where are you?", false) ) val unread1 = messages.filterNot(Message::isRead) val unread2 = messages.filterNot { it..

Develop!/Kotlin 2023.09.27

컬렉션에 대한 연산 in Kotlin

람다가 가독성을 올려주는 이유 중의 하나는 컬렉션에 대한 연산을 한 번에 수행할 수 있어서이다. 이미 살펴본 map, filter, any, foreach 와 같은 것들도 이러한 연산을 해 주는 것들 중 하나이다. 우선 list 를 만드는 방법 부터 살펴보자 fun createList() { val list1 = List(10) { it } println(list1) val list2 = List(10) { 0 } println(list2) val list3 = List(10) { 'a' + it } println(list3) val list4 = List(10) { list3[it%3] } println(list4) val mutableList1 = MutableList(5, { 10 * (it + 1..

Develop!/Kotlin 2023.09.25

람다 in Kotlin

람다식을 Kotlin에서도 사용할 수 있다. 가장 많이 사용하는 람다로 map이 있다. mapping의 약자인 듯 보인다. 기존 값을 사용하여 새로운 값을 맵핑해 준다는 의미로 보이는데 아래와 같이 사용한다. fun map() { val list = listOf(1, 2, 3, 4) val result = list.map { n:Int -> "[$n]" } val result2 = list.map { n -> "[$n]" } val result3 = list.map { "[${it}]" } println(result) println(result2) println(result3) val listChar = listOf('a', 'b', 'c', 'd') val resultChar = listChar.map..

Develop!/Kotlin 2023.09.25

제네릭스 in Kotlin

Java에서도 제네릭 타입이 이다. 어떠한 값을 사용할지 몰라 선언 시에 제네릭으로 선언하고 사용할 때 해당 타입으로 사용하는 것이다. 코틀린에서도 이러한 사용은 가능하다. 다음의 예를 통해 확인해 볼 수 있다. data class Automobile(val brand: String) class GenericHolder(private val value: T) { fun getValue(): T = value } fun genericHolder() { val h1 = GenericHolder(Automobile("Ford")) val a = h1.getValue() println(a) val h2 = GenericHolder(1) val i: Int = h2.getValue() println(i) val ..

Develop!/Kotlin 2023.09.22

안전한 호출과 엘비스 연산자 in kotlin

Java를 쓰면서 가장 골치 아픈게 NPE 이다. null인 객체를 바로 사용하려면 Runtime 시에 NPE가 발생하기 때문에 사용 전에 항상 if로 null인지 여부를 검증해 주거나 Optional을 사용해야 하기 때문이다. 코틀린에서는 이러한 골치아픈 내용을 손쉽게 사용할 수 있도록 해준다. fun String.echo() { println(toUpperCase()) println(this) println(toLowerCase()) } fun safeOperation() { val s1: String? = "Howdy!" s1?.echo() val s2: String? = null s2?.echo() } 이렇게 하기 위해 사용하는 것이 '?.' 이다. null이 될 수 있는 객체 뒤에 '.' 대신에..

Develop!/Kotlin 2023.09.14

Null이 될 수 없는 타입 in Kotlin

Java에서 가장 큰 실수가 null 을 만든 것이라고 한다. 그래서 Kotlin에서도 null을 없애려고 하였지만 Java를 지원하기 위해서 null을 사용하기는 한다. Java에서는 null이 될 수 없을 경우에는 lombok의 @NonNull 어노테이션을 사용한다. 코틀린에서는 기본이 non-null 이다. Java와의 연동으로 인해 null을 허용하고 싶으면 '?'를 사용하면 된다. 다음의 코드를 통해 사용법을 확인해 볼 수 있다. fun nullableType() { val s1 = "abc" // compile error // val s2: String = null val s3: String? = null val s4: String? = s1 // compile error // val s5: ..

Develop!/Kotlin 2023.09.06

구조 분해 선언 in Kotlin

사실 구조 분해라는 말은 코틀린에서 처음 들어 봤다. 어떠한 값을 여러 컴포넌트로 분해해서 나눠 준다는 의미 같다. 말로 설명하기 쉽지 않으니 소스 코드를 보자 fun compute(input: Int): Pair = if (input > 5) Pair(input * 2, "High") else Pair(input * 2, "Low") fun compute2(input: Int): Triple = if (input > 5) Triple(input * 2, "High", "Dummy") else Triple(input * 2, "Low", "Dummy") fun pair() { println(compute(7)) println(compute(4)) val result = compute(5) println(..

Develop!/Kotlin 2023.09.06

Data Class in Kotlin

값을 담는 Data class를 Java에서는 VO, DTO 등으로 부르고 @Value 또는 @Data 등의 어노테이션을 쓰면서 롬복을 활용한다. 뭐 기본적으로 그냥 getter, setter 등을 일일히 다 만들어 줘도 되긴 한다. 어째든 이러한 클래스를 별도로 분리하여 코틀린에서는 별도로 만들 수 있는데 data라는 키워드를 사용하여 만들 수 있다. data class Simple(val arg1: String, var arg2: Int) fun simple() { val s1 = Simple("Hi", 29) val s2 = Simple("Hi", 29) println(s1) println(s2) if (s1.equals(s2)) { println("eqauls") } else { println("..

Develop!/Kotlin 2023.09.04
728x90
반응형