관리 메뉴

hyeals study

코틀린 기초(7) - 제어 구조 [when] 본문

코틀린

코틀린 기초(7) - 제어 구조 [when]

hyeals 2020. 2. 4. 13:13

* when식은 자바에서 switch문에 해당하는 코틀린 구성요소임. if식과 마찬가지로 값을 만들어내는 임.

 

아래의 코드는 앞 게시물에서 사용한 enum 클래스를 이용해서 when식 구성한 예시임.

 

when식을 이용한 enum 값 찾기 예시

위의 코드는 color 파라미터에 전달된 값과 같은 분기를 찾는 기능을 함. 

 

* when이 값을 만들어내는 식이기 때문에 따로 getMnemonic함수의 반환형을 명시하지 않고 = 을 붙여서 when식 자체를 반환 값으로 직접 사용함.

 

자바와 달리 각 분기 끝에 break를 작성 하지 않아도 됨.

 

출력 결과

 

좀 더 나아가서 when에서 한 분기 안에 여러 값을 사용할 수 있음.

 

한 when 분기 안에 여러 값 사용한 예시

위의 코드처럼 when의 한 분기 안에서 여러 값을 사용할 수 있음. 이 때 값들을 콤마(,)로 구분해야 함.

 

출력 결과


[코틀린에서 when은 자바의 switch보다 훨씬 강력함.]

☞ 자바의 switch는 분기 조건에서 상수만을 허용하고 있지만 코틀린의 when은 분기 조건으로 임의의 객체를 허용함. 

 


[임의의 객체를 사용한 when]

 

예를 들어 코틀린 에서는 아래와 같은 코드 작성이 가능함.

 

아래의 코드는 두 개의 색을 조합했을 때 만들어질 수 있는 색을 알려주는 기능을 하는 함수임.

 

when 분기 조건에서 객체 사용한 예시

 

  • setOf 함수: 전달받은 객체들을 새로운 집합(set)객체로 반환해 주는 함수임. 
  • 집합은 원소의 순서가 중요하지 않기 때문에 분기 조건에서 (Color.RED, Color.YELLOW) 거나 (Color.YELLOW, Color.RED)이면 분기 문장이 실행됨.

* when 식에 전달된 객체가

  1. 분기 조건에 매치 되는 것이 있으면: 조건에 해당하는 결과 반환
  2. 분기 조건에 매치 되는 것이 없으면: else문장 실행

출력 결과

 

또한 when 분기 조건 부분에 을 넣을 수 있음. 

 


[인자가 없는 when]

 

바로 직전에 작성한 코드를 좀 더 효율적이게 작성할 수 있는 방법이 있음.

 

직전 코드는 분기 하기 위해 set 인스턴스를 생성함.

보통은 이게 큰 문제가 되지 않지만 이 함수가 자주 호출되면 불필요한 가비지 객체가 늘어나기 때문에 이를 방지할 필요가 있음.

 

이를 인자가 없는 when을 이용하면 해결할 수 있음.

 

인자가 없는 when 예시

위의 코드 처럼 인자가 없는 when식을 사용할 수 있음. 이는 불필요하게 가비지 인스턴스가 생기는 것을 방지할 수 있음.

 

* 다만 전 보다 코드 읽기가 어려울 수 있다는 단점이 있음. (가독성이 떨어짐)

 

* when에 아무 인자도 없으려면 각 분기 조건이 boolean 결과를 계산하는 식이어야 함.

 

출력 결과

 

 

 

본 게시물은 "Kotlin IN ACTION"을 참고함.

Comments