Post

[Introduction to Kotlin] 반복문 (repeat, while, do while)

Again and again and again and again and

[Introduction to Kotlin] 반복문 (repeat, while, do while)

반복문

때떄로 특정 코드 블록을 여러 번 실행해야 할 떄가 있다.
이때 단순하게 복사 & 붙여넣기로 코드를 반복 실행할 수 있겠지만, 만약 10만 번 반복해야하는 경우라면?

복사 & 붙여넣기는 비효율적이다.

Kotlin은 코드 블록을 반복 실행할 수 있는 문법인 반복문을 제공한다.

Repeat

가장 간단한 반복문인 repeat(n) { ... }은 반복할 횟수를 n에 넣고 중괄호 안에 실행할 코드를 넣으면 된다.

아래 코드는 Hello를 10번 출력한다.

1
2
3
4
5
fun main() {
    repeat(10) {
        println("Hello")
    }
}

만약 n0 이하의 값이면, repeat 메서드는 실행되지 않는다.

또한, it을 사용하여 현재 반복 횟수를 확인할 수 있다.

1
2
3
4
5
fun main() {
    repeat(3) { // 람다 표현식 사용
        println(it)
    }
}

람다 표현식
{ ... }안에 있는 코드 블록을 람다 표현식(lambda expression)이라고 한다.
람다는 이름이 없는 함수이며, 즉시 실행할 수 있는 익명 함수의 역할을 한다.

repeat을 사용하여 입력값 처리하기

반복문 안에서 입력을 읽고, 변수를 선언하고, 연산을 수행할 수 있다.
다음 프로그램은 표준 입력에서 숫자를 읽고, 합을 계산한다.

1
2
3
4
5
6
7
8
9
10
fun main() {
    val n = readln().toInt() // 반복할 횟수 입력 받음
    var sum = 0
    
    repeat(n) {
        val next = readln().toInt()
        sum += next // n 번 반복하여 수를 합산함
    }
    println(sum)
}

While 루프

Kotlin에는 특정 조건이 참인 경우에 반복하는 여러 방법이 있다.
일반적으로 사용되는 whiledo...while 두 가지 반복문에 다뤄보고자 한다.

위 두 가지 반복문의 차이점은 조건을 평가하는 순서와 반복 실행 방식이다.

while

while 루프는 코드 블록과 조건을 포함하는 반복문이다.
이 조건은 불리언(boolean) 표현식이며, 조건이 참이면 반복문이 실행되며, 조건이 거짓이 되면 반복이 종료된다.

1
2
3
while (condition) {
    // body: do something repetitive
}

조건이 처음부터 거짓이면 한 번도 실행되지 않을 수 있으며,
조건이 끝까지 참인 경우에 무한 루프(infinite loop)에 빠질 수 있다.
무한 루프는 사용자가 특정 입력을 할 때까지 반복하는 등의 특수한 경우에서 사용된다.

예제 1

1
2
3
4
5
6
7
8
9
10
fun main() {
    var i = 0           // 변수 선언
    
    while (i < 5) {     // i가 5 미만 일 때까지
        println(i)      // i를 출력
        i++            // i에 1을 더함
    }
    
    println("Complete")
}

위 프로그램은 i < 5가 거짓이 될 때까지 i를 출력하는 프로그램이다.
iwhile 반복문 내에서 1씩 증가되며, i가 5가 되면 프로그램은 Complete를 출력하며 종료된다.

예제 2

1
2
3
4
5
6
7
8
fun main() {
    var letter = 'A'        // 변수 선언
    
    while (letter <= 'Z') { // letter가 Z가 될 때까지
        print(letter)       // letter을 이어서 출력
        letter++            // letter를 한 단계 증가
    }
}

위 프로그램은 A 부터 알파벳을 한 단계씩 증가시키면서 Z까지 출력한다. 출력 결과는 다음과 같다.

1
ABCDEFGHIJKLMNOPQRSTUVWXYZ

문자(char)도 ++ 연산자를 사용하여 Unicode 순서대로 증가 시킬 수 있다.

예제 3

다음은 사용자가 입력한 여러 개의 단어를 읽고 출력하는 프로그램이다.

1
2
3
4
5
6
7
8
9
10
import java.util.*

fun main() {
    val scanner = Scanner(System.`in`) // 표준 입력을 사용하여 사용자의 입력을 읽는 scanner 객체 생성
    
    while (scanner.hasNext()) { // hasNext()는 사용자 입력 중 더 읽을 데이터가 있는지 확인
        val next = scanner.next() // hasNext()가 true 이면 next()로 다음 데이터를 읽음
        println(next)
    }
}

입력 예시

1
Kotlin is a modern language

출력 결과

1
2
3
4
5
Kotlin
is
a
modern
language

숫자 입력 시, scanner.hasNextInt()로 숫자 데이터를 읽을 수 있음.

do…while

do...while 반복문은 조건을 검사하기 이전에 코드 블록을 최소 1회 실행하는 반복문이다.
따라서, 반드시 한 번은 실행되는 것이 특징이다.

1
2
3
do {
    // body: do something
} while (condition)

예제 1

다음은 사용자의 입력을 받아 0이 입력될 때 까지 숫자를 출력하는 프로그램이다.

1
2
3
4
5
6
fun main() {
    do {
        val n = readln().toInt()
        println(n)
    } while (n > 0)
}

입력 예시

1
2
3
4
1
2
4
0

출력 결과

1
2
3
4
1
2
4
0

do...while 구문은 입력값이 최소 1회가 필요한 상황에서 유용하다.

This post is licensed under CC BY 4.0 by the author.