반응형
코틀린의 when의 분기 조건은 임의의 객체를 허용합니다(자바 switch는 분기 조건에 상수만을 허용)
아래 코드를 살펴보도록 하겠습니다
임의의 객체를 사용한 when
fun mix(c1:Color, c2:Color) =
when(setOf(c1, c2)){
setOf(RED, YELLOW) -> ORANGE
setOf(YELLOW, BLUE) -> GREEN
setOf(BLUE, VIOLET) -> INDIGO
else -> throw Exception("Dirty color")
}
when(setOf(c1, c2)) 여기서 알수 있는것은 when식의 인자는 아무 객체나 사용할수 있다는 것입니다. when이 인자로 받은 객체가 각 분기 조건에 있는 객체와 같은지 테스트 하기 때문입니다
아래 else는 매치되는 분기 조건이 없으면 이곳을 실행합니다
when문은 보시다시피 switch문과 문법이 비슷합니다
인자가 없는 when
fun mixOptimized(c1:Color, c2:Color) =
when{
(c1 == RED && c2 == YELLOW) ||
(c1 == YELLOW && c2 == RED) ->
ORANGE
(c1 == YELLOW && c2 == BLUE) ||
(c1 == BLUE && c2 == YELLOW) ->
GREEN
(c1 == BLUE && c2 == VIOLET) ||
(c1 == VIOLET && c2 == BLUE) ->
INDIGO
else -> throw Exception("Dirty color")
}
인자가 없는 when은 앞에 임의의 객체를 사용한 when보다 더 효율적 입니다.
앞에 when은 함수가 호출될 때마다 함수 인자로 주어진 두 색이 when의 분기 조건에 있는 다른 두 색과 같은지 비교하기 위해 계속해서 Set 인스턴스를 생성합니다.
함수가 자주 호출된다면 불필요한 가비지 객체가 늘어나는것을 방지하기 위해 함수를 고쳐 쓰는게 좋습니다
반응형
'Kotlin' 카테고리의 다른 글
코루틴 Scope는 어떤 종류들이 있을까? (CoroutineScope, LifecycleScope, ViewModelScope) (0) | 2022.04.25 |
---|---|
Kotlin에서 if문을 대체하는 2가지 방법 (0) | 2022.04.21 |
[Kotlin] 2차원 배열을 이해하고 사용해 보자! (0) | 2021.07.08 |
Kotlin에서 if는 어떻게 부를까요? (0) | 2021.03.26 |