Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

반복문(Loops) - 1부: while

이전 연습 문제에서 factorial 함수를 구현할 때 재귀(Recursion)를 사용했었죠. 함수형 프로그래밍에 익숙한 분들에게는 자연스러운 방식이겠지만, C나 Python 같은 명령형(Imperative) 언어를 주로 써오신 분들에게는 조금 낯설게 느껴졌을 수도 있습니다.

이번에는 재귀 대신 **반복문(Loops)**을 사용해서 똑같은 기능을 구현하는 방법을 알아보겠습니다.

while 루프

while 루프는 특정 조건이 참인 동안 코드 블록을 반복해서 실행하는 방식입니다. 기본적인 형태는 다음과 같습니다.

while <조건> {
    // 반복 실행할 코드
}

예를 들어, 1부터 5까지의 숫자를 모두 더하고 싶다면 다음과 같이 작성할 수 있습니다.

let sum = 0;
let i = 1;

// "i가 5보다 작거나 같은 동안 반복"
while i <= 5 {
    // `+=`는 `sum = sum + i`를 줄여 쓴 것입니다.
    sum += i;
    i += 1;
}

이 코드는 i가 5보다 커질 때까지 i를 1씩 증가시키며 sum에 더하는 과정을 반복합니다.

mut 키워드

하지만 위에서 작성한 예제 코드를 그대로 실행하면 컴파일 오류가 발생합니다.

error[E0384]: cannot assign twice to immutable variable `sum`
 --> src/main.rs:7:9
  |
2 |     let sum = 0;
  |         ---
  |         |
  |         first assignment to `sum`
  |         help: consider making this binding mutable: `mut sum`
...
7 |         sum += i;
  |         ^^^^^^^^ cannot assign twice to immutable variable

error[E0384]: cannot assign twice to immutable variable `i`
 --> src/main.rs:8:9
...

그 이유는 Rust의 변수가 기본적으로 **불변(Immutable)**이기 때문입니다. 한 번 값을 할당하고 나면, 나중에 그 값을 마음대로 바꿀 수 없죠.

변수의 값을 수정하고 싶다면 선언할 때 mut 키워드를 붙여서 해당 변수가 **가변(Mutable)**임을 명시해야 합니다.

// 이제 `sum`과 `i`의 값을 마음껏 바꿀 수 있습니다!
let mut sum = 0;
let mut i = 1;

while i <= 5 {
    sum += i;
    i += 1;
}

이렇게 수정하면 오류 없이 정상적으로 컴파일되고 실행됩니다.

더 읽어보기

Exercise

The exercise for this section is located in 02_basic_calculator/06_while