반응형
코틀린으로 반복문, 조건문 등을 어떻게 사용하는지 알아보겠습니다~!
코틀린 공식 문서를 참고했습니다.
When
자바에서서 사용되는 switch문 대신에 Kotlin은 When으로 구성할 수 있습니다. When을 선언문이나 표현식으로 사용할 수 있습니다.
When 선언문
fun main() {
cases("Hello")
cases(1)
cases(0L)
cases(MyClass())
cases("hello")
}
fun cases(obj: Any) {
when (obj) { // 1
1 -> println("One") // 2
"Hello" -> println("Greeting") // 3
is Long -> println("Long") // 4
!is String -> println("Not a string") // 5
else -> println("Unknown") // 6
}
}
class MyClass
- when 선언문입니다
- obj가 1인지 확인합니다.
- obj가 Hello와 같은지 확인합니다.
- 타입 검사를 합니다.
- 반대 타입 검사를 합니다.
- 기본 선언문(생략 가능).
모든 조건은 그중 하나가 충족될 때까지 순차적으로 확인됩니다. 따라서 첫 번째 적합한 조건만 실행됩니다.
When 표현식
fun main() {
println(whenAssign("Hello"))
println(whenAssign(3.4))
println(whenAssign(1))
println(whenAssign(MyClass()))
}
fun whenAssign(obj: Any): Any {
val result = when (obj) { // 1
1 -> "one" // 2
"Hello" -> 1 // 3
is Long -> false // 4
else -> 42 // 5
}
return result
}
class MyClass
- when 표현식입니다.
- obj가 1인 경우 값을 "one"로 설정합니다.
- obj가 "Hello"와 같으면 값을 1로 설정합니다.
- obj가 Long의 인스턴스인 경우 값을 false로 설정합니다.
- 이전 조건이 충족되지 않으면 값 "42"를 설정합니다. when 선언문과 달리 when 표현식은 default가 일반적으로 when 표현식에 필요합니다. (컴파일러가 다른 분기가 가능한 모든 경우를 포함하는지 확인할 수 있는 경우를 제외함, 예를 들어 seal class)
Loops
Kotlin은 일반적으로 사용되는 모든 루프를 지원합니다: for, while, do-while
for
For는 Kotlin에서는 대부분의 언어와 동일한 방식으로 작동합니다.
val cakes = listOf("carrot", "cheese", "chocolate")
for (cake in cakes) { // 1
println("Yummy, it's a $cake cake!")
}
- 리스트의 각 케이크를 반복합니다.
while and do-while
while 및 do-while 구문은 대부분의 언어와 유사하게 작동합니다.
fun eatACake() = println("Eat a Cake")
fun bakeACake() = println("Bake a Cake")
fun main(args: Array<String>) {
var cakesEaten = 0
var cakesBaked = 0
while (cakesEaten < 5) { // 1
eatACake()
cakesEaten ++
}
do { // 2
bakeACake()
cakesBaked++
} while (cakesBaked < cakesEaten)
}
- 조건이 참인 동안 블록을 실행합니다.
- 블록을 먼저 실행한 다음 조건을 확인합니다.
Iterators
Iterators 연산자를 구현하여 클래스에 고유한 Iterators를 정의할 수 있습니다.
class Animal(val name: String)
class Zoo(val animals: List<Animal>) {
operator fun iterator(): Iterator<Animal> { // 1
return animals.iterator() // 2
}
}
fun main() {
val zoo = Zoo(listOf(Animal("zebra"), Animal("lion")))
for (animal in zoo) { // 3
println("Watch out, it's a ${animal.name}")
}
}
- 클래스의 iterator를 정의합니다. 이름이 iterator여야 하고 operator 한정자가 있어야 합니다.
- 다음 메서드 요구 사항을 충족하는 iterator를 반환합니다.
- next(): Animal
- hasNext(): Boolean
- 사용자 정의 iterator를 사용하여 Zoo의 동물을 반복합니다.
iterator는 타입 또는 확장 함수로 선언할 수 있습니다.
Ranges
Kotlin에는 범위를 정의하기 위한 도구들이 있습니다.
for(i in 0..3) { // 1
print(i)
}
print(" ")
for(i in 0 until 3) { // 2
print(i)
}
print(" ")
for(i in 2..8 step 2) { // 3
print(i)
}
print(" ")
for (i in 3 downTo 0) { // 4
print(i)
}
print(" ")
// 0123 012 2468 3210
- 0에서 3(포함)까지의 범위를 반복합니다. 다른 프로그래밍 언어(C/C++/Java)의 'for(i=0; i<=3; ++i)'와 같습니다.
- 0에서 3(제외)까지의 범위를 반복합니다. Python의 for 루프 또는 다른 프로그래밍 언어(C/C++/Java)의 'for(i=0; i<3; ++i)'와 같습니다.
- 연속 요소에 대해 사용자가 정의한 증가 단계를 사용하여 범위를 반복합니다.
- 역순으로 범위를 반복합니다.
Char 범위도 지원됩니다.
for (c in 'a'..'d') { // 1
print(c)
}
print(" ")
for (c in 'z' downTo 's' step 2) { // 2
print(c)
}
print(" ")
- 알파벳 순서로 문자 범위를 반복합니다.
- Char 범위는 step 및 downTo도 지원합니다.
범위는 if 문에서도 유용합니다.
val x = 2
if (x in 1..5) { // 1
print("x is in range from 1 to 5")
}
println()
if (x !in 6..10) { // 2
print("x is not in range from 6 to 10")
}
- 값이 범위에 있는지 확인합니다.
- !in은 in의 반대입니다.
동일성 확인 (Equality Checks)
Kotlin은 구조적 비교를 위해 ==를 사용하고 참조 비교를 위해 ===를 사용합니다.
더 정확하게 말하면, a == b는 if (a == null) b == null else a.equals(b)로 컴파일됩니다.
val authors = setOf("Shakespeare", "Hemingway", "Twain")
val writers = setOf("Twain", "Shakespeare", "Hemingway")
println(authors == writers) // 1
println(authors === writers) // 2
- Authors.equals(writers)를 호출하고 요소 순서 무시를 설정하기 때문에 true를 반환합니다.
- authors와 writers가 별개의 참조이므로 false를 반환합니다.
조건 표현식 (Conditional Expression)
Kotlin에는 삼항 연산자가 없습니다.(condition ? then : else) 대신 if를 표현식으로 사용할 수 있습니다.
fun max(a: Int, b: Int) = if (a > b) a else b // 1
println(max(99, -42))
- if는 여기에서 값을 반환하는 표현식입니다.
반응형
'Language > Kotlin' 카테고리의 다른 글
코틀린[Kotlin] 함수형 프로그래밍 (고차 함수, 람다 함수, 확장 함수) (0) | 2021.09.22 |
---|---|
코틀린[Kotlin] 특별한 클래스들 (Data, Enum, Sealed Classes And Object) (0) | 2021.09.22 |
코틀린[Kotlin] 기본 문법 2 (클래스, 제너릭, 상속) (0) | 2021.09.22 |
코틀린[Kotlin] 기본 문법 1 (함수, 변수, 널 안전성) (0) | 2021.09.22 |
Coroutine을 사용한 동시성 프로그래밍과 async, await (0) | 2021.02.17 |