hyeals study
코틀린 기초(7) - 제어 구조 [when] 본문
* when식은 자바에서 switch문에 해당하는 코틀린 구성요소임. if식과 마찬가지로 값을 만들어내는 식임.
아래의 코드는 앞 게시물에서 사용한 enum 클래스를 이용해서 when식 구성한 예시임.
위의 코드는 color 파라미터에 전달된 값과 같은 분기를 찾는 기능을 함.
* when이 값을 만들어내는 식이기 때문에 따로 getMnemonic함수의 반환형을 명시하지 않고 = 을 붙여서 when식 자체를 반환 값으로 직접 사용함.
자바와 달리 각 분기 끝에 break를 작성 하지 않아도 됨.
좀 더 나아가서 when에서 한 분기 안에 여러 값을 사용할 수 있음.
위의 코드처럼 when의 한 분기 안에서 여러 값을 사용할 수 있음. 이 때 값들을 콤마(,)로 구분해야 함.
[코틀린에서 when은 자바의 switch보다 훨씬 강력함.]
☞ 자바의 switch는 분기 조건에서 상수만을 허용하고 있지만 코틀린의 when은 분기 조건으로 임의의 객체를 허용함.
[임의의 객체를 사용한 when]
예를 들어 코틀린 에서는 아래와 같은 코드 작성이 가능함.
아래의 코드는 두 개의 색을 조합했을 때 만들어질 수 있는 색을 알려주는 기능을 하는 함수임.
- setOf 함수: 전달받은 객체들을 새로운 집합(set)객체로 반환해 주는 함수임.
- 집합은 원소의 순서가 중요하지 않기 때문에 분기 조건에서 (Color.RED, Color.YELLOW) 거나 (Color.YELLOW, Color.RED)이면 분기 문장이 실행됨.
* when 식에 전달된 객체가
- 분기 조건에 매치 되는 것이 있으면: 조건에 해당하는 결과 반환
- 분기 조건에 매치 되는 것이 없으면: else문장 실행
또한 when 분기 조건 부분에 식을 넣을 수 있음.
[인자가 없는 when]
바로 직전에 작성한 코드를 좀 더 효율적이게 작성할 수 있는 방법이 있음.
직전 코드는 분기 하기 위해 set 인스턴스를 생성함.
보통은 이게 큰 문제가 되지 않지만 이 함수가 자주 호출되면 불필요한 가비지 객체가 늘어나기 때문에 이를 방지할 필요가 있음.
이를 인자가 없는 when을 이용하면 해결할 수 있음.
위의 코드 처럼 인자가 없는 when식을 사용할 수 있음. 이는 불필요하게 가비지 인스턴스가 생기는 것을 방지할 수 있음.
* 다만 전 보다 코드 읽기가 어려울 수 있다는 단점이 있음. (가독성이 떨어짐)
* when에 아무 인자도 없으려면 각 분기 조건이 boolean 결과를 계산하는 식이어야 함.
본 게시물은 "Kotlin IN ACTION"을 참고함.
'코틀린' 카테고리의 다른 글
코틀린 기초(9) - 분기에서 블록 사용 (0) | 2020.02.04 |
---|---|
코틀린 기초(8) - 스마트캐스트 & if를 when으로 (0) | 2020.02.04 |
코틀린 기초(6)- 제어 구조 [enum] (0) | 2020.02.03 |
코틀린 기초(5)-클래스 & 프로퍼티 (0) | 2020.02.02 |
코틀린 기초(4)-함수 (0) | 2020.02.01 |