Recent Posts
Recent Comments
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
관리 메뉴

Dev.

Kotlin - 'when expression', 코틀린의 switch-case 본문

Kotlin

Kotlin - 'when expression', 코틀린의 switch-case

Pppdw 2019. 11. 19. 10:52

1. Java 의 Switch-case 구문

//in java
int val_ = 0;
            switch(val_){
                case 1:
                    System.out.print("print 1");
                    break;
                case 2:
                    System.out.print("print 2");
                    break;
                default:
                    System.out.print("default");
                    break;
            }

위 와 같은 switch-case 분기문을 자바에서 꽤 자주 사용 하였을 것 이다.

 

switch-case 의 최대 단점으로 생각 했던 것 은

- 조건 당 걸리는 break 가 누락 된다면, 의도치 않은 아래의 case 까지 경유 하는 부분. (이로 인해서 간단한 소스코드 에서는 별 문제가 없겠지만, 거대한 소스일 경우 찾기 힘들정도의 에러를 뱉어낼 수 있다.)

//in java
int val_ = 0;
            switch(val_){
                case 1:
                case 2:
                    System.out.print("print 1, 2");
                    break;
                default:
                    System.out.print("default");
                    break;
            }

물론 위 처럼 의도적으로 break 를 누락시켜 특정 케이스에서 소스코드를 줄일 수 있는 장점도 분명히 존재하는 부분이다.

 

2. Kotlin 의 When expression

아래는 코틀린에서 switch-case 의 대체제로 활용될 when expression 의 예 이다.

//in Kotlin
val val_ = 0
        when (val_) {
            1 -> print("print 1")
            2 -> print("print 2")
            else -> print("default")
        }

 

정말 간결해졌다, 코드 라인 수 가 눈에 띄게 감소하였다.

 

when expression 에서 기존 자바의 switch-case 에서 사용하였던 의도적인 break 누락은 아래와  같다.

// in Kotlin
val val_ = 0
        when (val_) {
            1, 2 -> print("print 1, 2")
            else -> print("default")
        }

switch-case 구문에서 조건 당 붙게되는 case 키워드를 확연히 줄여 보일러플레이트 코드를 감소 시킬 수 있고,

이는 곧 코드의 가독성 증가로 직결된다.

 

참고 : https://kotlinlang.org/docs/reference/control-flow.html#when-expression

 

Control Flow: if, when, for, while - Kotlin Programming Language

 

kotlinlang.org

 

 

 

'Kotlin' 카테고리의 다른 글

Kotlin - 늦은 초기화 (1) lateinit  (0) 2019.11.12
Comments