본문 바로가기
Kotlin

자바의 switch 보다 강력한 kotlin의 when!

by 안솝우화 2021. 4. 5.
반응형

코틀린의 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 인스턴스를 생성합니다.

함수가 자주 호출된다면 불필요한 가비지 객체가 늘어나는것을 방지하기 위해 함수를 고쳐 쓰는게 좋습니다

반응형