Kotlin의 제어문 다루기
if문
1
2
3
if(조건) {
}
Java와 동일!!
그렇다면 if-else문은?
- java는 Statement지만, Kotlin에서는 Expression
Expression과 Statement
- Statement : 프로그램의 문장 전체를 의미 / 하나의 값으로 도출 안됨
- Expression : 반드시 하나의 값으로 도출되는 문장
예시
1
int score = 30 + 40;
30 + 40 = 70이라는 하나의 결과를 도출
Expression
이면서Statement
Java의 Expression 에러
1
2
3
4
5
String grade = if (score >= 50) {
"P";
}else{
"F";
}
Java는 Statement
로 취급하기 때문에 grade
에 if-else
를 담을 수 없다.
해당 문제를 해결하기 위한 3항 연산
1
String grade = score >= 50 ? "P" : "F";
3항 연산은 Expression
이면서 Statement
로 취급하기 때문에 하나의 값으로 사용 가능
Kotlin의 Expression
1
2
3
4
5
6
7
fun getPassOrFail(score: Int): String{
return if(score >= 50){
"P"
} else{
"F"
}
}
위와 같이 if-else
문을 하나의 값으로 보기 때문에 return
처리 할 수 있다.
- 그렇게 때문에 Kotlin은 3항 연산자가 존재하지 않는다.
if-else if-else문도 하나의 Expression
1
2
3
4
5
6
7
8
9
10
11
fun getGrade(score: Int): String{
return if(score >= 90) {
"A"
} else if(score >= 80) {
"F"
} else if (score >= 70) {
"C"
} else {
"D"
}
}
if-else if-else
문도 하나의 값으로 보기 때문에 return
처리
논리 연산자를 쓰지않고 범위를 지정하는 in
in 예제
1
2
3
4
5
fun validateScoreIsNotNegative(score: Int){
if(score in 0..100){
println("score의 범위는 0부터 100입니다.")
}
}
위와 같이 in
을 사용하면 범위를 지정해서 조건문을 사용할 수 있다.
!in
은 Not
으로 사용
switch와 when
Java의 Switch문 예제
1
2
3
4
5
6
7
8
9
10
11
12
private String getGradeWithSwitch(int score) {
swicth(score / 10) {
case 9:
return "A";
case 8:
return "B";
case 7:
return "C";
default:
return "D";
}
}
Kotlin의 Switch문 예제
1
2
3
4
5
6
7
8
fun getGradeWithSwitch(score: Int): String {
return when (score / 10) {
9 -> "A"
8 -> "B"
7 -> "C"
else -> "D"
}
}
Java와는 다르게 Switch문
을 그대로 반환
할 수 있고 case
를 사용하지 않고 ->
을 이용해서 값을 바로 작성할 수 있다.
Switch문 in활용
1
2
3
4
5
6
7
8
fun getGradeWithSwitch2(score: Int): String {
return when (score) {
in 90..99 -> "A"
in 80..89 -> "B"
in 70..79 -> "C"
else -> "D"
}
}
in
을 사용해서 범위를 지정하고 when
에서 조건을 받지 않고 사용할 수 있다.
Kotlin의 when 구조
1
2
3
4
5
when(값) {
조건부 -> 구문
조건부 -> 구문
else -> 구문
}
tip). Kotlin의 when은 Enum Class
or Sealed Class
와 함께 사용할 때 진가를 발휘
- 조건부에는 어떤한
Experssion
이라도 들어갈 수 있다. (ex. is Type)1 2 3 4 5 6
fun startsWithA(obj: Any): Boolean { return when(obj){ is String -> obj.startsWith("A") else -> false } }
obj
가is
를 통해 문자열임을 검증받기 때문에 조건문으로 사용하고,else
에서false
를 체크하는 Switch문 사용
- 여러개의 조건을 동시에 검사하는 예시
1 2 3 4 5 6
fun judgeNumber(number: Int) { when(number) { 1, 0, -1 -> println("어디서 많이 본 숫자입니다.") else -> println("1, 0, -1이 아닙니다.") } }
1 또는 0 또는 -1
인 경우, 3가지의 경우를 같이 사용해서 조건을 사용 가능
when의 값이 없는 경우 예제
1
2
3
4
5
6
7
fun judgeNumber2(number: Int) {
when{
number == 0 -> println("주어진 숫자는 0입니다")
number % 2 == 0 -> println("주어진 숫자는 짝수입니다")
else -> println("주어진 숫자는 홀수입니다")
}
}
when
에 값을 지정하지 않고 {}
를 통해 조건으로 이루어진 when
을 작성 가능