티스토리 뷰
반응형
Author: 니용
Kotlin 언어는 Java와 같지만 약간 다른 Control Flow(흐름 제어)를 가지고 있습니다.
대신 간편하게 사용할 수 있도록 설계되어 있습니다.
삼항 연산자
이전에 글에 작성된 부분입니다.
// Java
int maxOf(int a, int b) {
return (a > b) ? a : b;
}
// Kotlin
fun maxOf(a: Int, b: Int) = if(a > b) a else b
Switch Case
Kotlin은 Java의 스위치 제어문도 다릅니다.
// Java
int x = 0
switch(x) {
case 1: System.out.print("x == 1"); break;
case 2: case 3: System.out.print("x == 2 or x == 3"); break;
default: print("x is neither 1 nor 2");
}
// Kotlin
val x: Int? = 0
var res = when(x) {
1 -> print("x == 1")
2, 3 -> print("x == 2 or x == 3")
else -> {
print("x is neither 1 nor 2")
}
}
위처럼 when을 사용하고 break; 가 없습니다. 조건이 추가될 때마다 콤마(,)를 사용합니다.
default는 else로 치환되었네요.
Switch Case+
1. 조건 문에 함수를 넣을 수 있습니다.
fun parseInt(s: String): Int? {
try {
return s.toInt()
}
catch(e: NumberFormatException) {
return throw NumberFormatException()
}
}
when(x) {
parseInt(s) -> print("s encodes x")
else -> print("s does not encode x")
}
위의 경우 String s가 toInt가 가능한 경우 's encodes x'를 출력합니다.
그렇지 않은 경우 else문을 호출합니다.
2. 범위 값을 지정할 수 있습니다.
when(x) {
in 1..10 -> print("범위 안에 값이 있어요")
in validNum -> print("유효한 값")
!in 10..20 -> print("범위 밖에 값이 있어요")
else -> print("모두에 속하지 않아요")
}
3. 함수형 프로그래밍이 가능합니다.
fun hasPrefix(x: Any) = when(x) {
is String -> x.startsWith("prefix")
else -> false
}
'is'라는 함수는 Java의 instanceof와 같습니다.
리턴 타입을 추가하지 않은 이유는 추론이 가능하기 때문입니다.
4. 조건에 함수를 넣을 수 있습니다.
when {
x.isOdd() -> print("짝수")
y.isEven() -> print("홀수")
else -> print("x+y는 짝수")
}
(+) Kotlin 1.3부터 적용된 내용이지만 Lambda 표현식에 익숙하신 분들이 자주 사용할 것 같습니다.
fun Request.getBody() =
when (val response = executeRequest()) {
is Success -> response.body
is HttpError -> throw HttpException(response.status)
}
Foreach 문 (feat. While)
Java의 경우 3가지의 foreach 문이 존재합니다.
for(int i=0; i<arrays.length; i++){
System.out.println("array[i]:" + array[i]);
}
for(int i: arrays) {
// ...
}
arrays.stream().foreach(i -> {
// ...
});
Kotlin은 더 확장된 기능을 지원합니다.
for(i in 1..arrays.length) print(arrays[i]) // 1 <= i <= arrays.length까지
for(i: Int in arrays) {
// ...
}
for(i in 1..30) { // 1부터 30까지
// ...
}
for(i in 90 downTo 0 step 3) { // 90부터 시작하여 역순(downTo)으로 3마다 실행하는 foreach
// ...
}
for(i in 1..8 step 2) == for(i in 8 downTo 1 step 2) // 두 개는 함수는 다르지만 방법은 같습니다
for(i in 1 until 10) // 1 <= 1 < 10 까지의 범위
인덱스 변수를 지정하지 않아도 사용할 수 있습니다.
for(index in array.indices) { // indices가 기본 제공 함수임다
// ...
}
for((index, value) in array.withIndex()) {
println("인덱스: $index, 변수: $value")
}
// 결과:
// 인덱스: 0, 변수: aaa
// 인덱스: 1, 변수: bbb
// 인덱스: 2, 변수: ccc
while과 do.. while도 사용 가능해요.
while(a > 0) { // a가 양수가 되는 조건까지 무한루프
// ...
if(condition1)
break
else if(condition2)
continue
}
do {
val x = retrieveData()
} while (x != null) { // x는 이 범위 내에서도 사용 가능한 변수임다
//
}
반응형
'Server' 카테고리의 다른 글
Kotlin의 lateinit과 Nullable (2) (0) | 2020.06.30 |
---|---|
Kotlin의 생성자와 data class (0) | 2020.06.29 |
Kotlin의 Any와 Nullable (1) (0) | 2020.06.29 |
Kotlin의 함수(Function) (0) | 2020.06.26 |
[Spring] @Bean과 @Component의 차이 (0) | 2020.06.25 |
Kotlin 변수의 Wrapper Type (0) | 2020.06.25 |
댓글
공지사항