1.  조건문 when

🐰  다른 언어의 switch문은 if문의 연산식에서 사용되는 비교 연산자 '==' 만 사용해서 같은 값인지를 비교
🐰  코틀린을 제외한 거의 모든 프로그래밍 언어에서는 switch라는 이름으로 사용되며 선택문이라고 불리기도 함
🐰  코틀린의 when문은 다른 언어와는 다르게 같은 값뿐만 아니라 범위 값도 처리할 수 있고 사용 방법도 더 많음
       ➡️  특정 값을 선택할 수 있는 switch의 사용법에 if문의 범위 비교 기능이 더해진 if문의 확장판



1) 일반적인 형태의 when 사용하기


    ✏️  when 다음에 괄호 (()) 를 작성하고 괄호 안에는 주로 비교 대상 파라미터로 사용할 변수명을 입력
    ✏️  if에서처럼 괄호 다음에 중괄호 ({})를 사용해서 when 블록을 구분하고 블록 내부에서 비교할 값은

          화살표 연산자 Arrow Operator (->)를 사용해서 선택

when (파라미터) {
    비교값 -> {
            변수값이 비교값과 같다면 이 영역이 실행
     }
 }
    *  switch문과 비교하면 값을 비교하는 줄 앞의 case가 없어지고, 비교값 다음의 콜론이 화살표 연산자(->)로 대체
when (파라미터) {
    비교값1 -> {
            변수값이 비교값1과 같다면 이 영역이 실행.
    }
    비교값2 -> {
            변수값이 비교값1과 같다면 이 영역이 실행.
    }
    else -> {
            변수값이 앞에서 비교한 값들과 다르면 이 영역이 실행
    }
}
fun main() {

    val now = 10
    when(now) {
        8 -> {
            println("현재 시간은 8시 입니다.")
        }
        9 -> {
            println("현재 시간은 9시 입니다.")
        }
        else -> { // 위의 조건에 맞지 않으면 else 다음 코드가 실행
            println("현재 시간은 9시가 아닙니다.")
        }
    }
}


2) 콤마로 구분해서 when 사용하기


  ✏️  특정 값을 비교하는 데 결과 처리가 동일하다면 콤마(,)로 구분해서 한 번에 비교할 수 있음

fun main() {
    val time = 9
    when (time) {
        8, 9 -> {
            println("현재 시간은 8시 또는 9시입니다.")
        }
        else -> {
            println("현재 시간은 9시가 아닙니다.")
        }
    }
}


3) 범위 값을 비교하기


  ✏️  in을 사용해서 범위 값을 비교할 수 있음

fun main() {
    val ageOfMichael = 19
    when (ageOfMichael) {
        in 10..19 -> {
            println("마이클은 10대 입니다.")
        }
        !in 10..19 -> {
            println("마이클은 10대가 아닙니다.")
        }
        else -> {
            println("마이클의 나이를 알 수 없습니다.")
        }
    }
}


 4) 파라미터 없는 when 사용하기


  ✏️  when 다음에 오는 괄호를 생략하고 마치 if문처럼 사용할 수 있음

fun main() {

    val currentTime = 6
    when {
        currentTime == 5 -> {
            println("현재 시간은 5시입니다.")
        }
        currentTime > 5 -> {
            println("현재 시간은 5시가 넘었습니다.")
        }
        else -> {
            println("현재 시간은 5시 이전입니다.")
        }
    }
}

 


응용 예제
fun main() {
    /*
   사용자에게 성적을 입력받아
   When을 사용해서 학점을 출력하는 코드를 완성하세요.
   입력은 0 ~ 100까지 입력이 됩니다.
   * 기준
   A: 90 ~ 100
   B: 80 ~ 89
   C: 70 ~ 79
   D: 60 ~ 69
   F: 0 ~ 59

   예) 성적을 입력하세요 : 90
      입력하신 성적은 90점이고, 학점은 A입니다.
    */

    print("성적을 입력하세요 : ")
    val score = readln().trim().toInt()

    val grade = when (score) {
        in 90..100 -> {'A'}
        in 80..89 -> {'B'}
        in 70..79 -> {'C'}
        in 60..69 -> {'D'}
        else -> {'F'}
    }

    println("입력하신 성적은 ${score}점이고, 학점은 ${grade}입니다.")
}

 


2.  범위 클래스

🐰  코틀린을 이용하면 특정 범위의 값들을 간편하게 표현할 수 있음
    ⚡️ 범위 클래스로는 IntRange, LongRange, CharRange등이 있음
          예) IntRange 클래스를 사용해 1에서 5까지 숫자의 범위를 생성하는 코드

🐰  값 포함 여부를 확인할 때 '변수명.containts(값)' 사용

fun main() {

    val numRange: IntRange = 1..5
    println(numRange) // 1..5

    println(numRange.contains(3)) // true
    println(numRange.contains(10)) // false

    /*
    알파벳의 범위도 마찬가지. CharRange 클래스를 사용
     */
    val charRange: CharRange = 'a'..'e'
    println(charRange.contains('b')) // true
    println(charRange.contains('z')) // false
}

 

 

 

 

[ 내용 참고 : IT 학원 강의 ]

+ Recent posts