private void validateScoreIsNotNegative(int score) {
if(score < 0) {
throw new IllegalArgumentException(String.format("%s는 0보다 작을 수 없습니다.", score));
}
}
fun validateScoreIsNotNegative(score: Int) {
if(score < 0) {
throw IllegalArgumentException("${score}는 0보다 작을 수 없습니다.") //new를 사용하지 않고 예외를 throw 하는 것 외엔 자바와 다를 게 없음.
}
}
if (조건) {
}
private String getPassOrFail(int score) {
if(score >= 50) {
return "P";
} else {
return "F";
}
}
fun getPassOrFail(score: Int): String{
if (score >= 50) {
return "P"
} else {
return "F"
}
}
Java에서 if-else는 Statement 이지만, Kotlin에서는 Expression 입니다.
int score = 30 + 40;
30 + 40 은 70이라는 하나의 결과가 나온다. Expression 이면서 Statement라고 할 수 있다.
자바에서는 if문을 하나의 값으로 취급하지 않는다.
따라서 다음과 같은 코드에서는 에러가 날 수 밖에 없다.
String grade = if (score >= 50) { // 여기서부터 문법 오류가 남.
"P";
} else {
"F";
}
따라서, 이 문장은 '='을 통해서 바로 값을 대입할 수 없으므로 Statement라고 할 수 있다.
String grade = score >= 50 ? "P" : "F"
=> 3항 연산자는 하나의 값으로 취급하므로 에러가 없다. Expression 이면서 Statement 이다.
코틀린에서는 if~else 구문을 다음과 같이 사용 가능하다.
fun getPassOrFail(socre: Int): String {
if (score >= 50) {
return "P"
} else {
return "F"
}
}
또는
fun getPassOrFail(score: Int): String {
return if (score >= 50) {
"P"
} else {
"F"
}
}
=> 두번째 경우처럼 사용 가능한 이유는 코틀린은 Expression 이기 때문.
자바의 3항 연산자를 통해서 바로 값을 계산해서 return 하는 것 처럼, 코틀린에서는 if~else 를 바로 계산해서 return 할 수 있다.
그리고 코틀린은 if~else를 expression으로 사용할 수 있기 때문에 3항 연산자가 없다.
if~ else if ~ else 문법도 동일하다.
Java 코드
private String getGrade (int score) {
if(score >= 90) {
return "A";
} else if (score >= 80) {
return "B";
} else if (score >= 70) {
return "C";
} else {
return "D";
}
}
Kotlin 코드
fun getGrade(score: Int): String {
return if(score >= 90) {
"A"
} else if (score >= 80) {
"B"
} else if (score >= 70) {
"C"
} else {
"D"
}
}
어떠한 값이 특정 범위에 포함되어 있는지, 포함되어 있지 않은지
if (0 <= score && score <= 100) {...}
=
if (score in 0..100) {...}
예제
fun validateScoreIsNotNegative (score: Int) {
if(score !in 0..100) {
throw IllegalArgumentException("score의 범위는 0부터 100입니다")
}
}
fun validateScore(score: Int) {
if(score in 0..100) {
var score2 = "dddddddd"
}
}
Java 코드
private String getGradeWithSwitch (int score) {
switch (score / 10) {
case 9:
return "A";
case 8:
return "B";
case 7:
return "C";
default:
return "D";
}
}
Kotlin 코드 ver.1
fun getGradeWithSwitch(score: Int): String {
return when (score / 10) {
9 -> "A"
8 -> "B"
7 -> "C"
else -> "D"
}
}
Kotlin 코드 ver.2
fun getGradeWithSwitch(score: Int): String {
return when (score) {
in 90..99 -> "A"
in 80..89 -> "B"
in 70..79 -> "C"
else -> "D"
}
}
when (값) {
조건부 → 어떠한 구문
조건부 → 어떠한 구문
else → 어떠한 구문
}
Java 코드
private void judgeNumber(int number) {
if(number == 1 || number == 0 || number == -1) {
System.out.println("어디서 많이 본 숫자입니다");
} else {
System.out.println("1, 0, -1이 아닙니다");
}
}
Kotlin 코드
fun judgeNumber(number: Int) {
when (number) {
1, 0, -1 -> println("어디서 많이 본 숫자입니다")
else -> println("1, 0, -1이 아닙니다")
}
}
Java 코드 2
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 코드 2
fun judgeNumber2(number: Int) {
when {
number == 0 -> println("주어진 숫자는 0입니다")
number % 2 == 0 -> println("주어진 숫자는 짝수입니다")
else -> println("주어지눈 숫자는 홀수입니다")
}
}
when은 Enum Class 혹은 Sealed Class와 함께 사용할 경우, 더욱더 진가를 발휘한다.