[Kotlin] 기본 문법 (2)
들어가기 전
코틀린 변수 선언방법과 형변환 하는 방법에 대해 잘 모르시는 분들은 아래 링크 글을 먼저 보고 이 글을 보는 것을 추천드립니다.
https://hoestory.tistory.com/49
제어문
자바에서는 제어문이 if문과 switch case문이 있습니다. 그런데 코틀린에서 if문과 when문이 있습니다.
공통점은 if문이 있고 차이점은 코틀린은 when문이 있습니다.
fun main() {
val result = evenOrOdd(10);
println(result)
}
fun evenOrOdd(num: Int): String {
if(num % 2 == 0) {
return "짝수"
}else {
return "홀수"
}
}
위에 if문을 보면 자바처럼 작성할 수 있는 것을 볼 수 있습니다.
그런데 아래 코드는 자바와 같은 if문인데 전혀 다른 문법을 확인하실 수 있습니다.
fun main() {
val result = evenOrOdd(10);
println(result)
}
fun evenOrOdd(num: Int): String {
return if(num % 2 == 0) {
"짝수"
}else {
"홀수"
}
}
return을 하나만 쓰고 위와 같이 if문을 작성할 수 있습니다. 작성할 수 있는 이유는 코틀린은 자바와 달리 if문을 expression으로 보고 있습니다. 자바에서는 if문을 statement를 보고 있어서 코틀린처럼 작성할 수가 없습니다.
Expression과 Statement 차이
expression은 식이라서 값을 만들어내고 또 다른 식(expression)의 하위요소로 계산에 참여할 수 있습니다 그런데 statement는 문이라서 최상위 요소로 존재하며 어떠한 값도 만들어내지 없습니다.
When
코틀린에서는 switch case문이 존재하지 않습니다. switch case문과 동일한 역할을 하는 것은 코틀린에서 when문입니다.
fun main() {
val result = max(10);
println(result)
}
fun max(num: Long): String {
val number = 10L
val result = when {
num > number -> "${number}보다 숫자가 큽니다."
num == number -> "${number}와 숫자가 같습니다."
else -> "${number}보다 숫자가 작습니다."
}
return result
}
when문은 if문처럼 expression속성을 가지고 있어 if문처럼 바로 return을 할 수 있습니다.
fun main() {
val result = max(10)
println(result)
}
fun max(num: Long): String {
val number = 10L
return when {
num > number -> "${number}보다 숫자가 큽니다."
num == number -> "${number}와 숫자가 같습니다."
else -> "${number}보다 숫자가 작습니다."
}
}
When문은 아래 예제처럼 다양한 방법으로 작성할 수 있습니다.
fun main() {
inRangeNumber(20)
number(10)
val containABC = containABC("BDE")
println(containABC)
}
fun inRangeNumber(num: Int): Unit {
when (num) {
in 0..20 -> println("0~20사이에 있습니다.")
in 21..50 -> println("21~50사이에 있습니다")
else -> println("51이상입니다.")
}
}
fun number(num: Int): String {
return when (num) {
10, 12, 14 -> "Success"
else -> "Fail"
}
}
fun containABC(obj: Any): Boolean {
return when (obj) {
is String -> obj.contains("ABC")
else -> false
}
}
- in을 사용하는 부분은 범위를 나타냅니다.
- is는 비교하려는 객체가 타입이 맞는지 비교합니다.
반복문
코틀린에서 반복문은 자바의 반복문과의 공통점과 차이점을 가지고 있습니다.
공통점
자바에서 향상된 for문 즉 for-each문을 사용하는 방식과 코틀린에서 for-each문 사용방식이 거의 동일합니다.
자바에서는 for-each를 사용할 때 ":"을 사용하는데 코틀린에서는 in을 사용합니다.
val numbers = listOf(1, 3, 5, 7, 8)
for (number in numbers) {
println(number)
}
차이점
자바
int[] arr = {1,2,3,4};
for(int i = 0; i < arr.length; i++) {
System.out.println(i);
}
코틀린
fun main() {
val numbers = listOf(1, 3, 5, 7, 8)
for(i in 0..numbers.size) {
println(i)
}
}
자바에서는 i++ 또는 i--을 통해서 i의 값 을 증가 감소시켜주는데 코틀린에서는 어떻게 i의 값을 증가시켜줄까?
코틀린에서는 자바처럼 i++로 값을 증가시켜주는게 아닌 "step"을 사용하여 값을 증가시켜줍니다.default로 step가 1로 되어있어 1씩 증가됩니다.
그리고 "downTo" + "step"를 같이 사용해서 감소시켜줄 수 있습니다.
val numbers = listOf(1, 3, 5, 7, 8)
for(i in numbers.size downTo 0 step 2) {
println(i)
}
- downTo를 하여 값을 감소시켜주고 step를 통해 2씩 감소시켜줍니다.
'Kotlin' 카테고리의 다른 글
[Kotlin] java.time.* 사용시 발생하는 예외 해결 방법 (0) | 2023.06.19 |
---|---|
[Kotlin] 문자열 대체 메서드(removePrefix, removeSuffix, removeRange, removeSurrounding) (0) | 2023.05.04 |
[Kotlin] data class VS class (0) | 2023.02.24 |
[Kotlin] 기본 문법 (1) (0) | 2023.02.19 |
댓글
이 글 공유하기
다른 글
-
[Kotlin] java.time.* 사용시 발생하는 예외 해결 방법
[Kotlin] java.time.* 사용시 발생하는 예외 해결 방법
2023.06.19 -
[Kotlin] 문자열 대체 메서드(removePrefix, removeSuffix, removeRange, removeSurrounding)
[Kotlin] 문자열 대체 메서드(removePrefix, removeSuffix, removeRange, removeSurrounding)
2023.05.04 -
[Kotlin] data class VS class
[Kotlin] data class VS class
2023.02.24 -
[Kotlin] 기본 문법 (1)
[Kotlin] 기본 문법 (1)
2023.02.19