1. if문
[자바]
여기 int가 0보다 작다면 exception을 뱉어내는 메서드가 있습니다.
이런 코드를 코틀린으로 변경하려면 어떻게 해야할까요?
private void validateScoreIsnotNegative(int score) {
if (score < 0) {
throw new IllegalArgumentException(String.format("%s는 0보다 작을 수 없습니다.", score));
}
}
[코틀린]
디테일한 부분에서는 다른점이 있지만, 크게 달라지는 부분은 없습니다.
다른점이라고 해도 If문에서 달라지는 것은 아니죠.
- 함수에서 Unit (void가 생략됨)
- 함수 만들때 fun을 사용
- exception 던질 때 new 가 생략됨
fun validateScoreIsNotNegative(score: Int) {
if (score < 0) {
throw IllegalArgumentException("${score}는 0보다 작을 수 없습니다.")
}
}
2. if - else문
자바에서 if-else는 Statement이지만 코틀린에서는 Expression 입니다.
Statement와 Expression이 뭘까요?
- Statement : 프로그램의 문장, 하나의 값으로 도출되지 않는다.
- 여기에서는 Statement에서 Expression이 제외된 부분을 의미합니다.
- Expression : 하나의 값으로 도출되는 문장
- Expression은 Statement에 포함된다.
Expression의 예시는 다음과 같습니다.
30 + 40을 했을 때 결과값이 70으로 도출되는 것, 즉 하나의 값으로 도출되는 문장을 말합니다.
그러나 자바에서는 if문을 Expression으로 취급하지 않기 때문에, if문을 그대로 return 받을 수 없습니다.
return 받기 위해서는 "P"와 "F"앞에 return을 붙여줘야 합니다.
이런 문제에 대한 대안으로 자바에서는 3항 연산자를 사용하고 있습니다.
3항 연산자를 사용하게 되면 if문도 Expression으로 취급하기 때문에 바로 변수에 값을 담을 수 있습니다.
[코틀린]
코틀린에서는 if문을 Expression으로 취급할 수 있습니다.
그렇기 떄문에 아래와 같이 중복되는 return문을 통합할 수 있습니다.
코틀린에서는 if-else를 Expression으로 사용할 수 있기 때문에 3항 연산자가 없습니다.
3. 범위 조건
코틀린에서는 범위를 다음과 같이 확인할 수 있습니다.
변수의 값이 0부터 100 사이가 아닐 경우에 대한 조건문
fun validateScore(score: Int) {
if (score !in 0..100)
throw IllegalArgumentException("score의 범위는 0부터 100입니다")
}
4. when (Java의 switch)
Java의 switch와 if문을 코틀린에서는 when 이라는 문법을 사용하여 문법을 적용할 수 있습니다.
[Java]
아래와 같은 자바 문법이 있습니다.
점수에 따라 등급을 매겨주는 코드입니다.
switch case문을 이용하고 있는 것을 확인할 수 있네요.
[Kotlin]
코틀린에서는 switch 문을 when 으로 대체 가능합니다.
그리고 case를 사용할 필요가 없으며,
when 문도 Expression이기 때문에 when 앞에 return을 적용할 수 있습니다.
fun getGradeWithSwitch(score: Int): String {
return when (score / 10) {
9 -> "A"
8 -> "B"
7 -> "C"
else -> "D"
}
}
range에 대한 조건이 있을 경우에는 아래와 같이 적용할 수도 있습니다.
fun getGradeWithSwitch2(score: Int): String {
return when (score) {
in 90..99 -> "A"
in 80..89 -> "B"
else -> "D"
}
}
[Java]
경우에 따라서는 if문을 대체할 수도 있습니다.
obj 변수가 String type이라면 특정 로직을 실행하도록 하여라 라는 문법인데요
이것을 코틀린으로 변경한다면 어떻게 하면 될까요?
[Kotlin]
코틀린에서는 아래와 같이 변경할 수 있습니다.
obj가 String 이라면 obj.startsWith("A") 문법이 실행되고
그렇지 않다면 else 문이 return 되겠네요.
fun startsWithA(obj: Any): Boolean {
return when (obj) {
is String -> obj.startsWith("A")
else -> false
}
}
[Java]
조건이 여러개인 경우에도 when문을 사용할 수 있습니다.
아래 코드를 살펴봅시다.
number이 1 또는 0 또는 -1인 경우 "어디서 많이 본 숫자입니다"가 출력되고
그렇지 않은 경우 "-1, 0, 1이 아닙니다"라고 메세지가 출력되는 코드입니다.
[Kotlin]
코틀린으로는 이렇게 변경할 수 있습니다.
한결 간결해진 것을 확인할 수 있습니다.
fun jundgeNumber(number: Int) {
when (number) {
1, 0, -1 -> println("어디서 많이 본 숫자입니다")
else -> println("1, 0, -1이 아닙니다")
}
}
[Java]
when문에는 꼭 변수가 할당 되어야 하는 것은 아닙니다.
아래 코드를 살펴봅시다.
number의 값에 따라서 출력문이 달라지는 코드입니다.
[Kotlin]
코틀린에서는 아래와 같이 변경할 수 있습니다.
fun judgeNumber2(number: Int) {
when {
number == 0 -> println("주어진 숫자는 0입니다")
number %2 == 0 -> println("주어진 숫자는 짝수입니다")
else -> println("주어진 숫자는 짝수입니다")
}
}
* when은 Enum class 혹은 Sealed Class와 함께 사용할 경우, 더욱더 진가를 발휘한다.
'공부방 > Kotlin' 카테고리의 다른 글
코틀린에서 예외를 다루는 방법 (0) | 2023.05.17 |
---|---|
코틀린에서 반복문을 다르는 방법 (0) | 2023.05.17 |
코틀린에서 연산자를 다루는 방법 (0) | 2023.05.17 |
3. 코틀린에서 Type을 다루는 방법 (0) | 2023.05.16 |
코틀린에서 null을 다루는 방법 (0) | 2023.05.16 |