Table of contents
if는 표현식이다
Java에서 if는 문(statement)이다. 값을 반환하지 않기 때문에 삼항 연산자 ? :가 따로 존재한다. Kotlin에서는 if 자체가 값을 반환하기 때문에 삼항 연산자가 아예 없다.
val score = 85
val grade = if (score >= 90) "A" else if (score >= 80) "B" else "C"
println(grade) // B
블록으로 쓸 수도 있는데, 이때 각 블록의 마지막 줄이 반환값이 된다.
val message = if (score >= 60) {
println("통과!")
"합격" // 이 값이 message에 들어감
} else {
println("재시험...")
"불합격"
}
이게 왜 좋을까? var로 변수를 먼저 선언하고 조건별로 값을 채우는 패턴이 사라진다. val + if 표현식 조합이면 변수 선언과 동시에 값이 확정되기 때문에, 이후에 값이 바뀔 걱정을 할 필요가 없다.
when
Java의 switch를 쓰다 보면 break를 빠뜨리거나, 타입 제한 때문에 불편할 때가 있다. Kotlin의 when은 이런 문제가 없다.
val day = 3
val dayName = when (day) {
1 -> "월요일"
2 -> "화요일"
3 -> "수요일"
4 -> "목요일"
5 -> "금요일"
6, 7 -> "주말"
else -> "알 수 없음"
}
when도 if처럼 표현식이라 값을 반환할 수 있다. 그리고 단순 값 비교를 넘어서 범위, 타입 체크, 조건식까지 가능하다.
val x = 15
when {
x < 0 -> println("음수")
x in 1..10 -> println("1~10 사이")
x is Int -> println("정수인데 10 초과")
else -> println("기타")
}
인자 없이 when을 쓰면 if-else 체인을 더 읽기 좋게 바꿀 수 있다. 조건이 3개 이상인 분기에서 특히 유용하다.
for와 범위(range)
Kotlin의 for는 Java의 향상된 for문과 비슷한데, 범위(range) 표현이 추가된다.
// 1부터 5까지 (5 포함)
for (i in 1..5) {
print("$i ") // 1 2 3 4 5
}
..은 끝 값을 포함한다. 끝 값을 제외하려면 until을 쓴다.
// 배열 인덱스 순회에 적합
for (i in 0 until 5) {
print("$i ") // 0 1 2 3 4
}
역순이나 간격 조절도 된다.
for (i in 5 downTo 1) {
print("$i ") // 5 4 3 2 1
}
for (i in 1..10 step 2) {
print("$i ") // 1 3 5 7 9
}
리스트를 순회할 때는 인덱스가 필요한지 아닌지에 따라 쓰는 방식이 달라진다.
val fruits = listOf("사과", "바나나", "딸기")
// 값만 필요할 때
for (fruit in fruits) {
println(fruit)
}
// 인덱스도 필요할 때
for ((index, fruit) in fruits.withIndex()) {
println("$index: $fruit")
}
Java에서 for (int i = 0; i < list.size(); i++)라고 쓰던 패턴이 훨씬 간결해진다.
while
while과 do-while은 다른 언어와 거의 같다.
var count = 3
while (count > 0) {
println("카운트: $count")
count--
}
do {
println("최소 1번 실행")
} while (false)
한 가지 알아둘 점은, Kotlin에는 전통적인 for (int i = 0; i < n; i++) 스타일의 for문이 없다는 것이다. 범위 표현으로 완전히 대체된다.
다음 편에서는 Kotlin의 함수를 다룬다. 기본값 파라미터, named argument, 확장 함수가 코드를 얼마나 깔끔하게 만들어주는지 살펴보자.
→ 3편: 함수
Loading comments...