반응형
여러가지 기능
Type Alias
Kotlin
typealias FruitFilter = (Fruit) -> Boolean
fun filterFruits(fruits: List<Fruit>, filter: FruitFilter) {
}
typealias USGTMap = Map<String, UltraSuperGuardianTribe>
data class UltraSuperGuardianTribe(
val name: String
)
typealias
: 긴 이름의 클래스 혹은 타입이 있을 때 축약하거나 더 좋은 이름을 쓰고싶을 때 사용할 수 있다.
as import
Kotlin
import com.heekng.kotlinStudy.kotlin.lec12.Person as PersonA
import com.heekng.kotlinStudy.kotlin.lec16.Person as PersonB
fun main() {
PersonA
PersonB("heekng", "ko")
}
- as import: 다른 패키지의 같은 이름 함수를 동시에 가져오고 싶을 때 사용할 수 있다.
구조분해와 componentN 함수
Kotlin
fun main() {
val person = Person("heekng", 28)
val (name, age) = person
/*
// 동일하다.
val name = person.component1()
val age = person.component2()
*/
println("이름: ${name} 나이: ${age}")
}
data class Person(
val name: String,
val age: Int
)
구조분해
: 복합적인 값을 분해해서 여러 변수를 한 번에 초기화하는 것Data Class
는ComponentN
이라는 함수도 자동으로 만들어준다.- 구조분해는 프로퍼티의 이름을 인식해서 가져오는 것이 아니라 변수의 순서대로 가져온다.
map
의entry
또한 구조분해 문법을 사용한 것이다.
Kotlin
fun main() {
val person = Person2("heekng", 28)
val (name, age) = person
println("이름: ${name} 나이: ${age}")
}
class Person2(
val name: String,
val age: Int
) {
operator fun component1(): String {
return this.name
}
operator fun component2(): Int {
return this.age
}
}
Data Class
가 아닌데 구조분해를 사용하고 싶다면componentN
함수를 직접 구현하면 된다.componentN
함수는 연산자 성질을 가지고 있기 때문에 직접 구현할 때에는operator
키워드를 붙여주어야 한다.
Jump와 Label
Kotlin
val numbers = listOf(1, 2, 3)
numbers.map { it + 1 }
.forEach {println(it)}
numbers.forEach {number ->
if (number == 2) {
return@forEach
}
}
return
: 기본적으로 가장 가까운enclosing function
또는 익명함수로 값이 반환된다.break
: 가장 가까운 루프가 제거된다.continue
: 가장 가까운 루프를 다음step
으로 보낸다.- 위는 자바와 동일하지만 코틀린에서
foreach
를 사용할 때에는 조금 다르다. - 함수형 프로그래밍
foreach
에서는continue
또는break
을 사용하지 못한다. continue
나break
을 사용하고 싶다면?foreach
를run{}
으로 감싸고,return@run
하여break
할 수 있다.return@foreach
하여continue
할 수 있다.
Kotlin
abc@ for (i in 1..100) {
for (j in 1..100) {
if (j == 2) {
break@abc
}
println("${i} ${j}")
}
}
Label
: 특정expression
에 라벨이름@ 을 붙여 하나의 라벨로 간주하고break
,continue
,return
등을 사용하는 기능Label
을 사용한Jump
는 사용하지 않는 것을 추천한다.
TakeIf와 TakeUnless
Kotlin
// default
fun getNumberOrNull(number: Int): Int? {
return if (number <= 0) {
null
} else {
number
}
}
// takeIf
fun getNumberOrNullTakeIf(number: Int): Int? {
return number.takeIf { it > 0 }
}
// takeUnless
fun getNumberOrNullTakeUnless(number: Int): Int? {
return number.takeUnless { it <= 0 }
}
takeIf
: 주어진 조건을 만족하면 그 값이, 그렇지 않으면 null이 반환된다.takeAunless
: 주어진 조건을 만족하지 않으면 그 값이, 그렇지 않으면 null이 반환된다.
반응형
'Java & Kotlin > Kotlin' 카테고리의 다른 글
[Kotlin] 컬렉션을 함수형으로 사용하기 (0) | 2022.07.07 |
---|---|
[Kotlin] 람다 (0) | 2022.07.07 |
[Kotlin] 함수 (0) | 2022.07.07 |
[Kotlin] 배열과 컬렉션 (0) | 2022.07.07 |
[Kotlin] Data, Enum, Sealed 클래스 (0) | 2022.07.06 |
[Kotlin] 중첩 클래스를 다루는 방법 (0) | 2022.07.06 |