추가적으로 알아두어야 할 코틀린 특성

de_sj_awa·2023년 4월 15일
1
post-custom-banner

1. Type Alias와 as import

  • Type Alias는 긴 이름의 클래스 혹은 함수 타입이 있을 때 축약하거나 더 좋은 이름을 쓰고 싶을 때 사용한다.
typealias FruitFilter = (Fruit) -> Boolean

fun filterFruits(fruits: List<Fruit>, filter: FruitFilter) {

}
data class UltraSuperGuardianTribe (
	val name: String
)

typealias USGTMap = Map<String, UltraSuperGuardianTribe>
  • as import : 어떤 클래스나 함수를 임포트할 때 이름을 바꾸는 기능

2. 구조분해와 componentN 함수

  • 구조분해 : 복합적인 값을 분해하여 어러 변수를 한 번에 초기화하는 것
val person = Person("peron", 100)
val (name, age) = person
println("이름 : ${name}, 나이 : ${age}")
  • Data Class는 componentN이란 함수도 자동으로 만들어준다.
val person = Person("peron", 100)
val name = person.component1()
val age = person.component2()
  • 즉, 구조분해 함수를 쓴다는 것은 componentN 함수를 호출한다는 뜻이다.
  • Data Class가 아닌데 구조분해를 사용하고 싶다면, componentN 함수를 직접 구현해 줄 수도 있다. componentN 함수는 연산자의 속성을 가지고 있기 때문에 앞에 operator를 붙여줘야 한다.
class Person(
	val name: String,
    val age: Int
) {
	operator fun component1(): String {
    	return this.name
    }
    
    operator fun component2(): Int {
    	return this.age
    }
}

3. Jump와 Label

  • return : 기본적으로 가장 가까운 enclosing function 또는 익명함수로 값이 반환된다.
  • break : 가장 가까운 루프가 제거된다.
  • continue : 가장 가까운 루프를 다음 step으로 보낸다.
  • for문 및 while 문에서 break, continue 기능은 동일하다. 단 forEach 구문에서는 break, continue를 쓸 수 없다. 그러나 forEach 구문에서 break와 continue를 사용하고 싶다면 다음과 같이 사용한다.
val numbers = listOf(1, 2, 3, 4, 5)
run {
	numbers.forEach { number -> 
    	if (number == 3) {
        	return@run			// break
        }
        println(number)
    }
}
val numbers = listOf(1, 2, 3, 4, 5)
numbers.forEach { number -> 
    if (number == 3) {
        return@forEach	    // continue
    }
    println(number)
}
  • Kotlin에는 라벨이라는 기능이 있다. 특정 expression에 라벨이름@을 붙여 하나의 라벨로 간주하고 break, continue, return 등을 사용한다.
loop@ for (i in 1..100) {
	for (j in 1..100) {
    	if (j == 2) {
        	break@loop
        }
        print("${i} ${j}")
    }
}    
  • 이 경우에는 첫번째 for문을 멈춰버린다.
  • 그러나 Label을 사용한 Jump는 사용하지 않는 것을 추천한다.

4. TakeIf와 TakeUnless

fun getNumberOrNull(): Int? {
	return if (number <= 0) {
    	null
    } else {
    	number
    }
}
  • Kotlin에서는 method chaning을 위한 특이한 함수를 제공한다.
fun getNumberOrNullV2(): Int? {
	return number.takeIf { it > 0 }
}
  • takeIf는 주어진 조건을 만족하면 그 값이, 그렇지 않으면 null이 반환된다.
fun getNumberOrNullV3(): Int? {
	return number.takeUnless { it <= 0 }
}
  • takeUnless는 주어진 조건을 만족하지 않으면 그 값이, 그렇지 않으면 null이 반환된다.

참고

profile
이것저것 관심많은 개발자.
post-custom-banner

0개의 댓글