본문 바로가기
코틀린

[코틀린] 조건부

by 아스키의 공부방 2020. 12. 10.
728x90
반응형

if / else if / else는 같다.

조건문은 스테이트풀(Stateful) 논리를 나타내는 데 유용하지만 작성 시 반복될 수 있습니다. 위 예에서는 각 분기에 String을 인쇄합니다. 이 반복을 피하기 위해 Kotlin은 조건식을 제공합니다. 마지막 예는 다음과 같이 다시 작성될 수 있습니다.

val answerString: String = if (count == 42) {
    "I have the answer."
} else if (count > 35) {
    "The answer is close."
} else {
    "The answer eludes me."
}

println(answerString)

암시적으로 각 조건부 분기는 마지막 줄에 표현식의 결과를 반환하므로 return 키워드를 사용할 필요가 없습니다. 세 분기의 결과는 모두 String 유형이므로 if-else 표현식의 결과도 String 유형입니다. 이 예에서 answerString에는 if-else 표현식의 결과에서 초기 값이 할당됩니다. 유형 추론을 사용하여 answerString에 명시적 유형 선언을 생략할 수 있지만 명확히 하기 위해 유형 선언을 포함하는 것이 좋습니다.

 

아래 예와 같이 조건문의 복잡도가 증가하면 if-else 표현식을 when 표현식으로 교체할 것을 고려할 수 있습니다.

val answerString = when {
    count == 42 -> "I have the answer."
    count > 35 -> "The answer is close."
    else -> "The answer eludes me."
}

println(answerString)

when 표현식의 각 분기는 조건, 화살표(->) 및 결과로 표시됩니다. 화살표의 왼쪽 조건이 true로 평가되면 오른쪽에 있는 표현식의 결과가 반환됩니다. 한 분기에서 다음 분기로 실행되지 않습니다. when 표현식 예의 코드는 이전 예의 코드와 기능적으로 동일하지만 쉽게 읽을 수 있습니다.

 

Kotlin의 조건부는 이 언어의 강력한 기능 중 하나인 스마트 변환을 강조합니다. 안전 호출 연산자 또는 null이 아닌 어설션 연산자를 사용하여 nullable 값을 처리하는 대신 아래 예와 같이 조건문을 사용하여 변수에 null 값 참조가 있는지 확인할 수 있습니다.

val languageName: String? = null
if (languageName != null) {
    // No need to write languageName?.toUpperCase()
    println(languageName.toUpperCase())
}

조건부 분기 내에서 languageName은 nullable이 아닌 것으로 간주될 수 있습니다. Kotlin에서는 분기 실행 조건에 따라 languageName은 null 값을 보유할 수 없으므로 분기 내에서 languageName을 nullable로 처리할 필요가 없습니다. 이 스마트 변환은 null 검사, 유형 검사 또는 컨트랙트를 충족하는 모든 조건에 적용됩니다.

 

 

 

 

 

728x90
반응형

'코틀린' 카테고리의 다른 글

[코틀린] 데이터베이스 헬퍼  (0) 2020.12.11
[코틀린] 리사이클러뷰  (0) 2020.12.11
[코틀린] 공부1  (0) 2020.12.10
[코틀린] 함수 | 단순화 | 익명 함수  (0) 2020.12.10
[코틀린] 변수 선언 | Null 안전  (0) 2020.12.10