BackEnd/Kotlin
5강. 코틀린에서 조건문을 다루는 방법
hanseom
2024. 2. 4. 08:30
반응형
- if문
- Expression과 Statement
- switch와 when
if문
if / if-else / if-else if-else 모두 Java와 문법이 동일합니다. 다음은 Java와 Kotlin if문 코드입니다.
// Java
private void validateScoreIsNotNegative(int score) {
if (score < 0) {
throw new IllegalArgumentException(String.format("%s는 0보다 작을 수 없습니다.", score));
}
}
// Kotlin
fun validateScoreIsNotNegative(score: Int) {
if (score < 0) {
throw IllegalArgumentException("${score}는 0보다 작을 수 없습니다.")
}
}
Expression과 Statement
- Statement: 프로그램의 문장, 하나의 값으로 도출되지 않습니다.
- Expression: 하나의 값으로 도출되는 문장입니다.
다음은 Java와 Kotlin if ~ else문 코드입니다.
// Java
private String getPassOrFail(int score) {
if (score >= 50) {
return "P";
} else {
return "F";
}
}
// Kotlin
fun getPassOrFail(score: Int): String {
if (score >= 50) {
return "P"
} else {
return "F"
}
}
역시 문법은 동일하지만, 한 가지 다른 점이 존재합니다. Java에서 if-else는 Statement이지만, Kotlin에서는 Expression 입니다. 위의 코드를 Expression으로 변경하면 다음과 같습니다.
- Kotlin에서는 if-else를 expression으로 사용할 수 있기 때문에 3항 연산자가 존재하지 않습니다.
// Java (3항 연산자)
private String getPassOrFail(int score) {
return score >= 50 ? "P" : "F";
}
// Kotlin
fun getPassOrFail(score: Int): String {
return if (score >= 50) {
"P"
} else {
"F"
}
}
if-else if-else 문법도 동일합니다.
// Java
private String getGrade(int score) {
if (score >= 90) {
return "A";
} else if (score >= 80) {
return "B";
} else {
return "C";
}
}
// Kotlin
fun getGrade(score: Int): String {
return if (score >= 90) {
"A"
} else if (score >= 80) {
"B"
} else {
"C"
}
}
Tip) 어떠한 값이 특정 범위에 포함되어 있는지, 포함되어 있지 않은지 판단하는 방법
Java에서는 다음과 같이 작성했습니다.
if (0 <= score && score <= 100) {...}
Kotlin에서 같은 방식을 사용할 수 있지만, 다음과 같이 사용도 가능합니다.
if (score in 0..100) {...}
switch와 when
Kotlin에서는 switch case문 대신 when을 사용합니다.
when (값) {
조건부 -> 구문
조건부 -> 구문
else -> 구문
}
다음은 Java의 switch case문과 Kotlin의 When 코드입니다.
// Java
private String getGradeWithSwitch(int score) {
switch (score / 10) {
case 9:
return "A";
case 8:
return "B";
default:
return "C";
}
}
// Kotlin
fun getGradeWithSwitch(score: Int): String {
return when (score / 10) {
9 -> "A"
8 -> "B"
else -> "C"
}
}
Kotlin의 when은 특정 값 외 다음 코드와 같이 다양한 조건을 적용하여 분기할 수 있습니다.
fun getGradeWithSwitch(score: Int): String {
return when (score) {
in 90..99 -> "A"
in 80..89 -> "B"
else -> "C"
}
}
when 특징
- 조건부에는 어떠한 expression이라도 들어갈 수 있습니다. (ex. is Type)
- 조건부에서 여러 개의 조건을 동시에 검사할 수 있습니다. (쉼표(,)로 구분)
- (값)이 없을 수도 있습니다. (early return 처럼 동작)
- when은 Enum Class 혹은 Sealed Class와 함께 사용할 경우, 더욱더 진가를 발휘합니다.
when 특징에 대한 코드는 다음의 Java 및 Kotlin 코드를 참고하세요.
/* 조건부에는 어떠한 expression이라도 들어갈 수 있습니다. (ex. is Type) */
// Java
private boolean startsWithA(Object obj) {
if (obj instanceof String) {
return ((String) obj).startsWith("A");
} else {
return false;
}
}
// Kotlin
fun startsWithA(obj: Any): Boolean {
return when (obj) {
is String -> obj.startsWith("A")
else -> false
}
}
/* 조건부에서 여러 개의 조건을 동시에 검사할 수 있습니다. (쉼표(,)로 구분) */
// Java
private void judgeNumber(int number) {
if (number == 1 || number == 0) {
System.out.println("0 또는 1입니다.");
} else {
System.out.println("0 또는 1이 아닙니다.");
}
}
// Kotlin
fun judgeNumber(number: Int) {
when (number) {
1, 0 -> println("0 또는 1입니다.")
else -> println("0 또는 1이 아닙니다.")
}
}
/* (값)이 없을 수도 있습니다. (early return 처럼 동작) */
// Java
private void judgeNumber2(int number) {
if (number == 0) {
System.out.println("주어진 숫자는 0입니다.");
return;
}
if (number % 2 == 0) {
System.out.println("주어진 숫자는 짝수입니다.");
return;
}
System.out.println("주어진 숫자는 홀수입니다.");
}
}
// Kotlin
fun judgeNumber2(number: Int) {
when {
number == 0 -> println("주어진 숫자는 0입니다.")
number % 2 == 0 -> println("주어진 숫자는 짝수입니다.")
else -> println("주어진 숫자는 홀수입니다.")
}
}
감사합니다.
반응형