인프런에서 제공하고 있는 강의를 보고 정리한 글입니다.
Type Alias 와 as import
Type Alias
긴 이름이나 클래스 혹은 함수 타입이 있을 때, 축약하거나 더 좋은 이름을 쓰고 싶은 경우가 있는데, 그럴 때 사용할 수 있다.
fun filterFruits(fuirts: List<Fruit>, filter : (Fruit) -> Boolean) {
}
// 너무 길다...! 이럴 경우, 축약하고 싶을 수 있다.
너무 길어서, 줄이고 싶을 때 다음과 같이 줄일 수 있다.
typealias FruitFilter = (Fruit) -> Boolean
이름이 긴 클래스를 컬렉션에 사용할 때도 간단히 줄일 수 있다.
as import
다름 패키지의 같은 이름 함수를 동시에 가져오고 싶은 경우가 있을 것이다.
어떤 클래스나 함수를 import 할 때 이름을 바꾸는 기능을 as import 라고 부른다.
import com.testCode.packagea.printHelloWorld as printHelloWorldA
import com.testCode.packageb.printHelloWorld as printHelloWorldB
****
fun main() {
printHelloWorldA()
printHelloWorldB()
}
구조 분해와 componentN 함수
val person = Person("Jack", 100)
val (name, age) = person
다음과 같이 사용할 수 있다.
data class Person {
val name: String,
val age: Int
}
fun main() {
val person = Person("Jack", 100)
val (name, age) = person
println("이름 : ${name}, 나이 : ${age}")
}
data class 는 기본적으로 componentN이란 함수가 자동으로 만들어진다.
데이터 클래스는 기본적으로 자기가 가지고 있는 필드에 대한 component함수를 만들어주는데, 이게 단순하게 첫 번째 프로퍼티를 첫번째에, 두번째프로퍼티를 두번째에 넣어주게 되는 것이라서, 이름을 구분하는게 아니니 주의해서 사용해야한다.
데이터 클래스가 아닌 경우에는 직접 componentN 을 구현해줄 수도 있다.
class Person (
val name: String,
val age: Int
) {
operator fun component1() : String {
return this.name
}
operator fun component2() : Int {
return this.age
}
}
Jump와 Label
fun main() {
val numbers = listOf(1, 2, 3)
numbers.map { number + 1 }
.forEach { println(number) }
// foreach 에서는 continue 와 break 를 사용할 수 없다...!
// 그래서 run 으로 감사서 사용한다.
// break 를 꼭 쓰고 싶다면..
run {
numbers.forEach { number ->
if (number == 3) {
return@run
}
println(number)
}
}
// continue 를 꼭 쓰고 다면
run {
numbers.forEach { number ->
if (number == 3) {
return@forEach
}
}
}
}
// 익숙한 for문 쓰자.... 익숙한 걸 사용하는 것이 더 낫다
Label
특정 expression 에 라벨이름@ 을 붙여서 하나의 라벨로 간주하고, break, continue, return 등을 사용하는 기능을 말한다.
fun main() {
abc@ for(i in 1..100) {
for (j in 1..100) {
if (j == 2) {
break@abc
}
}
}
}
사용하지 않는게 좋아보인다. 쓰지 말자!
TakeIf와 TakeUnless
method chaning 을 위한 특이한 함수를 제공한다.
TakeIf
주어진 조건을 만족하면 그 값이, 그렇지 않으면 null 이 반환된다.
fun getNumberOfNullV2() : Int? {
return number.takeIf { it > 0 }
}
TakeUnless
주어진 조건을 만족하지 않으면 그 값이 나오고, 그렇지 않으면 null 이 반환된다.
'[ Kotlin ]' 카테고리의 다른 글
코틀린의 제너릭과 타입 파라미터 (0) | 2024.08.29 |
---|---|
코틀린의 scope function - 20강 (0) | 2024.08.29 |
코틀린에서 컬렉션을 함수형으로 다루는 방법 -18강 (0) | 2024.08.29 |
코틀린에서 함수 및 람다를 다루는 방법 - 16강, 17강 (0) | 2024.08.28 |
코틀린에서 배열과 컬렉션을 다루는 방법 - 15강 (0) | 2024.08.28 |