이번 포스팅에서는 코틀린의 흐름 제어 중, 조건문에 대해 알아보자.
다른 언어와 크게 다를 것이 없기에, 조건문의 정의나 형식 등
기초적인 내용은 생략하고 간단한 예제와 함께 알아보겠다.
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문에 대해 알아보았다.
'Kotlin (코틀린)' 카테고리의 다른 글
[Kotlin] 코틀린의 String 저장 방식은 다르다? (0) | 2024.05.20 |
---|---|
[Kotlin] 코틀린의 참조 타입 → 원시 타입 변환 확인 / 기본형 · 참조형 자료형의 비교 원리 / 이중 등호와 삼중 등호 (==, === (2) | 2024.05.19 |
[Kotlin] 코틀린의 null / null 처리 연산자 ? ?. !! / 엘비스 연산자 ?: (0) | 2024.05.11 |
[Kotlin] 코틀린 함수 / 메서드와 함수 / 단일 표현식 함수 (0) | 2024.05.10 |
[Kotlin] 코틀린 늦은 초기화 기법 - lateinit / lazy (0) | 2024.05.08 |