르탄즈 5기

[르탄즈 5기] Chapter 03 - 조건문 when

박매트 2024. 1. 19. 23:43

코틀린 사용을 위한 기본 문법 중 잘 모르는 부분에 대해서 설명하려고 한다.

 

조건문 when

  • when 다음에 괄호 ( )를 작성하고 괄호 안에는 주로 비교 대상 파라미터로 사용할 변수명을 입력합니다.
  • if에서처럼 괄호 다음에 중괄호 { }를 사용해서 when 블록을 구분하고 블록 내부에서 비교할 값은 화살표 연산자(Arrow Operator '->')를 사용해서 선택합니다.
when (파라미터) {
    비교값 -> {
        // 변숫값이 비교값과 같다면 이 영역이 실행됩니다.
    }
}

 

  • 위에서 살펴본 switch 문과 비교하면 값을 비교하는 줄 앞의 case가 없어지고 비교값 다음의 콜론이 화살표 연산자(->)로 대체되었습니다.
  • 여러 개의 값을 하나의 when 문에서 비교할 수도 있습니다.
when (파라미터) {
    비교값1 -> {
        // 변숫값이 비교값1과 같다면 이 영역이 실행됩니다.
    }
    비교값2 -> {
        // 변숫값이 비교값2와 같다면 이 영역이 실행됩니다.
    }
    else -> {
        // 변숫값이 앞에서 비교한 것들과 다르면 이 영역이 실행됩니다.
    }
}

 

Activity 코드 예제

package net.flow9.thisiskotlin.basicsyntax

import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        var now = 10
        when (now) {
            8 -> {
                Log.d("when", "현재 시간은 8시 입니다.")
            }

            9 -> {
                Log.d("when", "현재 시간은 9시 입니다.")
            }

            else -> { // 위의 모든 조건에 맞지 않으면 else 다음 코드가 실행 됩니다.
                Log.d("when", "현재 시간은 9시가 아닙니다.")
            }
        }
    }
}

/** [로그캣 출력 내용]
현재 시간은 9시가 아닙니다.
*/

 

 

콤마로 구분해서 사용하기

  • 특정 값을 비교하는데 결과 처리가 동일하다면 콤마(,)로 구분해서 한 번에 비교할 수 있습니다.
package net.flow9.thisiskotlin.basicsyntax

import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        var now = 9
        when (now) {
            8, 9 -> {
                Log.d("when", "현재 시간은 8시 또는 9시 입니다.")
            }
            else -> { // 위의 모든 조건에 맞지 않으면 else 다음 코드가 실행 됩니다.
                Log.d("when", "현재 시간은 9시가 아닙니다.")
            }
        }
    }
}

/** [로그캣 출력 내용]
현재 시간은 8시 또는 9시 입니다.
*/

 

 

범위 값을 비교하기

  • in을 사용해서 범위 값을 비교할 수도 있습니다.
  • if 문의 비교 연산자 중 <=, >= 과 같은 기능을 구현할 수 있습니다.
package net.flow9.thisiskotlin.basicsyntax

import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        var ageOfMichael = 19
        when (ageOfMichael) {
            in 10..19 -> {
                Log.d("when", "마이클은 10대 입니다.")
            }

            !in 10..19 -> {
                Log.d("when", "마이클은 10대가 아닙니다.")
            }

            else -> {
                Log.d("when", "마이클의 나이를 알 수 없습니다.")
            }
        }
    }
}

/** [로그캣 출력 내용]
마이클은 10대 입니다.
*/

 

 

파라미터 없는 when 사용하기

  • when 다음에 오는 괄호를 생략하고 마치 if 문처럼 사용할 수도 있습니다.
package net.flow9.thisiskotlin.basicsyntax

import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        var currentTime = 6
        when {
            currentTime == 5 -> {
                Log.d("when", "현재 시간은 5시 입니다.")
            }

            currentTime > 5 -> {
                Log.d("when", "현재 시간은 시가 넘었습니다.")
            }

            else -> {
                Log.d("when", "현재 시간은 5시 이전입니다.")
            }
        }
    }
}

/** [로그캣 출력 내용]
현재 시간은 5시가 넘었습니다.
*/

 

 

사용 예시 - 특정 값, 개수가 많지 않은 경우, 값의 범위가 넓지 않은 경우

when (요일) {
    월 -> 영어 공부를 합니다.
    화 -> 자전거 모임이 있습니다.
    수 -> 친구를 만납니다.
    목 -> 피아노를 칩니다.
    금 -> 코딩 공부로 밤을 세웁니다.
    토 -> 빨래를 합니다.
    else -> 집 청소를 합니다.
}