[Kotlin] 2-3. 선택 표현과 처리 : enum과 when

2022. 5. 15. 17:46·Kotlin/Kotlin In Action
728x90

[ enum 클래스 정의 ]

// 가장 기본적인 enum class
enum class Color {
	RED, BLUE, YELLOW, GREEN, BLACK
}

 

∘ enum 클래스 안에 프로퍼티나 메서드를 정의할 수 있다.

enum class Color(
	val r: Int, val g: Int, val b: Int
) {
	RED(255, 0, 0),
	YELLOW(255, 255, 0),
	GREEN(0, 255, 0),
	BLUE(0, 0, 255)
	;

	// enum class 내부 메서드
	fun getRgb(): Int {
		return (r * 256 + g) * 256 + b
	}
	// fun getRgb() = (r * 256 + g) * 256 + b
}

 

∘ enum의 각 상수를 정의할 때 그 상수에 해당하는 프로퍼티 값을 지정해야 한다. RED x , RED(255,0,0) o

∘ enum class 내부에 메서드를 정의할 때 ; 을 필수적으로 붙여야 한다.


[ when으로 enum 클래스 다루기 ]

∘ 코틀린의 when은 자바의 switch를 대체할 수 있다.

fun getColor(color: Color) =
    when(color) {
    	Color.RED -> "빨강"
        Color.Blue -> "파랑"
        Color.Green -> "초록"
      	Color.Yellow -> "노랑"
    }

 

fun getColor(color: Color) =
    when(color) {
    	Color.RED, Color.ORANGE -> "warm"
        Color.GREEN -> "neutral"
        Color.BLUE, Color.INDIGO -> "cold"
      	else -> "잘 모르겠음"
    }

 

∘ when에 setOf를 사용할 수 있다.

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")
    }

 

 


[ 스마트 캐스트 : 타입 검사와 타입 캐스트 조합 ]

 

fun smartCast(e : Any){
    when (e){
        is Int -> println(e*2) //변수 e가 Int이면 Int로 스마트 캐스트 후 e*2 처리
        is String -> println(e.length) //변수 e가 String이면 String으로 스마트 캐스트 후 e.length 처리
        is IntArray -> println(e.sum()) //변수 e가 IntArray이면 IntArray로 스마트 캐스트 후 e.sum() 처리
        else -> return
}

[ 리팩토링 if => when ]

 

// if
fun eval(e: Expr): Int =
    if(e is Num){
    	e.value
    }
    else if(e is Sum) {
    	eval(e.left) + eval(e.right)
    }
    else {
    	throw IllegalArgumentException("Unknown expression")
    }

 

fun eval(e: Expr): Int = 
    when(e) {
	   is Num -> e.value
 	   is Sum -> eval(e.left) + eval(e.right)
 	   else -> throw IllegalArgumentException("UnKnown expression");
    }

 

728x90
저작자표시 (새창열림)

'Kotlin > Kotlin In Action' 카테고리의 다른 글

[Kotlin] 2-5. 코틀린의 예외 처리  (0) 2022.05.15
[Kotlin] 2-4. 이터레이션: while & for  (0) 2022.05.15
[Kotlin] 2-2. 클래스와 프로퍼티  (0) 2022.04.03
[Kotlin] 2-1. 함수와 변수  (0) 2022.03.31
[Kotlin] 1. 코틀린이란?  (0) 2022.01.19
'Kotlin/Kotlin In Action' 카테고리의 다른 글
  • [Kotlin] 2-5. 코틀린의 예외 처리
  • [Kotlin] 2-4. 이터레이션: while & for
  • [Kotlin] 2-2. 클래스와 프로퍼티
  • [Kotlin] 2-1. 함수와 변수
gudwnsgur
gudwnsgur
IT
    250x250
  • gudwnsgur
    gudwnsgur
    gudwnsgur
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 개발이야기
      • Spring
        • 이슈 해결
      • JPA
        • spring data jpa
      • Java
        • Java의 정석
      • Kotlin
        • Kotlin In Action
        • Kotlin 정리
      • 대규모 시스템 설계 기초
      • JavaScript
        • JS ES6+
      • 면접
        • CS
      • SQLD
      • BE 개발
        • spring webflux
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    session
    HTTP
    대규모 시스템 설계 기초
    cookie
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gudwnsgur
[Kotlin] 2-3. 선택 표현과 처리 : enum과 when
상단으로

티스토리툴바