Kotlin (코틀린)

[Kotlin] 코틀린의 조건문 / if / when

Oscar:) 2024. 5. 18. 17:52

 

 

이번 포스팅에서는 코틀린의 흐름 제어 중, 조건문에 대해 알아보자.

 

다른 언어와 크게 다를 것이 없기에, 조건문의 정의나 형식 등

기초적인 내용은 생략하고 간단한 예제와 함께 알아보겠다.

 

 

 


if 문

 

 

단순히 if문만 생각하면 크게 어려울 것이 없다.

 

간단한 예제를 보자.

val name = "Oscar"
var result = ""

if (name == "Oscar") {
        result = "상남자"
} else {
        result = "하남자"
}

println(result) // 출력 : 상남자

 

자바와 크게 다를 것이 없는 if문이다.

 

 

 

하지만 코틀린에서의 if문은 값을 반환하는 표현식으로도 사용할 수 있다.

이 부분이 코틀린의 if문을 소개하고자 하는 핵심이다.

val name = "Oscar"
val result = if (name == "Oscar") {
        "상남자"
} else {
        "하남자"
}

println(result) // 출력 : 상남자


// 블록안에 들어갈 내용이 짧으면 한 줄로 표현할 수도 있다.
val result = if (name == "Oscar") "상남자" else "하남자"

 

if / else 조건에 해당하는 값이 result 변수에 대입된 것을 확인할 수 있다.

 

 

 

이를 응용하여 함수의 반환 값으로도 사용할 수 있다.

fun kindOfMan(name: String): String {
	return if (name == "Oscar") {
            "상남자"
	} else {
            "하남자"
	}
}

println(kindOfMan("Sam")) // 출력 : 하남자

 

위 처럼 조건문을 표현식으로 사용하면 변수를 미리 빈 값으로 초기화 해놓는 등

번거로운 코드를 작성하지 않아도 되고, 코드를 읽어 내려가기에도 편하다.

 

 

 

위 처럼 사용할 때, 해당 블록 안에 무조건 대입되는 값만 들어가야 하는 것은 아니다.

람다식처럼, 블록의 마지막 표현식이 변수에 할당된다.

val result = if (name == "Oscar") {
	// 대충 다른 작업
        // 대충 다른 작업22
        ...
        "상남자" // result에 할당되는 값
} else {
        "하남자"
}

 

그렇기에 조건식의 블록 안에서 또다른 작업을 처리할 수도 있다.

 

 

 


when 문

 

 

자바에서의 switch/case 문을 대체한다고 볼 수 있다.

 

마찬가지로 문법이 크게 어렵지 않으니, 예제를 보며 이해해보자.

val name = "Oscar"

when (name) {
        "Oscar" -> println("상남자")
        "Sam" -> println("하남자")
        "Harry" -> println("하남자2")
        "Lion" -> println("하남자3")
        else -> println("그냥 남자")
}

// 출력 : 상남자

 

switch/case문과 비교하자면 break 등을 사용하지 않기에

훨씬 깔끔해진 가독성을 느낄 수 있다.

 

 

만약 한 줄로 표현하기 어렵다면 중괄호{}를 사용하면 된다.

val name = "Oscar"

when (name) {
        "Oscar" -> println("상남자")
        "Sam" -> {
            println("하남자")
            println("그 중에서도 특히 하남자")
        }
}

// 출력 : 상남자

 

 

 

조건을 여러개로 표현하려면 쉼표(,)를 이용할 수 있다.

val name = "Human"

when (name) {
        "Oscar" -> println("미남")
        "Sam", "Human" -> println("뚱보")
}

// 출력 : 뚱보

 

 

 

위에서 소개한 if문의 표현식 사용법처럼, when문도 마찬가지로 다음과 같이 사용할 수 있다.

val name = "Harry"

val result = when (name) {
	"Oscar" -> "섹시남"
	"Sam" -> "뚱보"
	"Harry" -> "유부남"
	else -> "그냥 남자"
}

println(result) // 출력 : 유부남

 

 

개인적으로는 if / else 로 구분할 수 있는 2개의 조건까지 if문을 주로 사용하고,

조건이 3개가 넘으면 when문을 사용하고 있다.

 

if / else if / else 로 표현하느니, when문을 사용하는 것이 훨씬 깔끔하다고 생각하기 때문이다.

 

 

 

코틀린에서도 조건이 3개가 넘어가는 순간 if문 대신 when문을 강요한다.

 

 

노란 경고를 표시하며 when문을 사용하라는 압박을 주는 것을 확인할 수 있다.

(2개의 조건까지는 경고가 표시되지 않는다)

 

 

 


 

인자가 없는 when 문

 

 

위에서 설명했듯이 when문의 경우 조건이 3개 이상일 때 주로 사용하게 된다.

 

하지만 조건이 많더라도 예외적으로 if문을 사용하게되는 경우가 있는데,

바로 다양한 종류의 조건이 필요한 경우다.

 

when문의 경우 조건식을 넣을 수 있는 괄호가 1개 밖에 없기 때문이다.

반면 if문은 else if문으로 여러 종류의 조건을 지정할 수 있다.

 

 

위와 같은 상황에서도 when문을 사용하고 싶다면 인자가 없는 when문을 사용하면 된다.

val name = "오스카"

val result = when {
	name.length > 10 -> "이름이 긴 사람"
	name[0] == '오' -> "오씨를 가진 사람"
	else -> "그냥 사람"
}

println(result) // 출력 : 오씨를 가진 사람

 

위 처럼 인자가 없는 when문을 사용하면

else if문을 사용하는 것처럼 다양한 종류의 조건을 사용할 수 있다.

 

 

 


 

 

 

코틀린의 if문과 when문에 대해 알아보았다.