본문 바로가기

공부방/Kotlin

코틀린에서 반복문을 다르는 방법

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 과 같은 형식으로 호출할 수 있다는 차이가 있습니다.