코틀린에서 반복문을 다르는 방법
1. for - each 문
[Java]
리스트를 만들고, 리스트 안에 있는 값들을 출력하는 코드가 있습니다.
이 코드를 코틀린으로 변경해보면 어떻게 될까요?
public class Lec06Main {
public static void main(String[] args) {
List<Long> numbers = Arrays.asList(1L, 2L, 3L);
for (long number : numbers) {
System.out.println(number);
}
}
}
[Kotlin]
향상된 for문도 Java와 크게 차이나는 부분은 없습니다.
- 컬렉션을 만드는 방법이 다릅니다.
- 이터레이터 안에서 콜론(:) 대신 in을 사용합니다.
- Java와 동일하게 iterable이 구현된 타입이라면 모두 들어갈 수 있습니다.
fun main() {
val numbers = listOf(1L, 2L, 3L)
for (number in numbers) {
println(number)
}
}
2. 전통적인 for문
전통적인 for문에서는 범위를 지정해주는 부분이 조금씩 다릅니다.
앞에서 배웠던 내용의 반복이기 때문에 어렵지 않을 것입니다.
[Java]
자바에서 for문을 이용해 값을 출력하는 코드입니다.
public class Lec06Main {
public static void main(String[] args) {
for (int i = 0; i <=3 ; i++) {
System.out.println(i);
}
}
}
[kotlin]
코틀린에서는 .. 이라는 문법을 이용하여 간단하게 구현할 수 있습니다.
fun main() {
for (i in 1..3) {
println(i)
}
}
[Java]
반면에 값이 1씩 줄어드는 for문은 어떻게 구현할까요?
먼저 자바 코드를 확인해 보도록 하겠습니다.
public class Lec06Main {
public static void main(String[] args) {
for (int i = 3; i >=1 ; i--) {
System.out.println(i);
}
}
}
[Kotlin]
코틀린에서 구현할 때는 downTo 라는 문법을 사용합니다.
어색하지만 어렵지는 않은 부분입니다.
package lec06
fun main() {
for (i in 3 downTo 1) {
println(i)
}
}
[Java]
그럼 2칸씩 증가하는 값은 어떻게 구현할까요?
자바 코드입니다.
public class Lec06Main {
public static void main(String[] args) {
for (int i = 1; i <= 5; i += 2) {
System.out.println(i);
}
}
}
[kotlin]
코틀린에서는 step이라는 명령어를 통해서 구현할 수 있습니다.
package lec06
fun main() {
for (i in 1..3 step 2) {
println(i)
}
}
.. 연산자
범위를 만들어 내는 연산자이고 이 코드를 클릭해보면
IntRange가 IntProgression 클래스를 상속받는 것을 확인할 수 있습니다.
downTo, step
downTo, step 과 같은 것도 함수입니다(중위 호출 함수)
일반적인 메서드를 호출하는 방식과 format이 약간 다른 것이기 때문에 어색할 수 있습니다.
기존의 메서드를 호출하는 방식이 변수.함수이름(argument)
downTo와 step과 같은 경우에는 변수 함수이름 argument 과 같은 형식으로 호출할 수 있다는 차이가 있습니다.