Rust 반복문
while
while
반복문은 많은 언어들에서 사용하는 방식과 유사하다.while
반복문은 주어진 조건이 참이면 처리를 반복한다.
let mut count = 0;
while count < 10 {
println!("{}", count);
count += 1;
}
많은 언어들에서 무한 반복문을 만들기 위해 while
문을 아래와 같이 활용한다.
while true {
println!("무한 반복");
}
러스트에서는 loop
키워드를 통해 더 간단히 해결할 수 있다.
위 코드를 빌드하면 아래와 같이 Rust 컴파일러가 친절하게 loop
를 사용하라는 warning을 보여준다.
loop
loop
키워드는 다음에 오는 코드 블록을 무한히 반복하는데, break
키워드를 만나거나 프로그램이 종료될 때까지 계속 실행한다.
let mut count = 0;
loop {
println!("{}", count);
count += 1;
if count == 10 {
break;
}
}
for
for
키워드는 다른 많은 언어들이 반복문을 생성하기 위해 지원하는 키워드다.
Rust 언어 역시 for
키워드를 지원하고, 기본적인 형태는 아래와 같다.
let items = [1,2,3,4,5];
for item in items {
println!("{}", item);
}
println!("{:?}", items);
다만, 위 코드는 컴파일 시 다음과 같은 에러가 발생한다.
Rust 컴파일러가 출력해준 내용 처럼 이유는 맨 마지막 라인이다.items
변수는 for
문으로 소유권이 이동됬고, 이동된 items
변수를 마지막 라인에서 사용하려 했기 때문이다.
이를 이해 하기 위해선 for
문이 동작하는 방식을 알아야한다.
for
반복문은 아래와 같이 세 가지 형태의 메소드로 호출로 확장된다.
for item in items
->for item in IntoIterator::into_iter(items)
for item in &items
->for item in items.iter()
for item in &mut items
->for item in items.iter_mut()
바로 위에서 본 코드는 1번에 해당하는데,items
의 소유권이 into_iter()
메소드로 넘어가서 컴파일 에러가 발생한 것이다.
따라서, items
변수를 읽기 전용으로 반복문을 돌리고,
반복문이 끝난 후에도 소유권을 유지하기 위해서는 아래와 같이 사용해야 한다.
for item in &items {
...
}
println!("{:?}", items);
for item in items.iter() {
...
}
println!("{:?}", items);
for label
Rust에는 goto
키워드가 없는데, 특정 조건에 의해 이중 반복문을 빠져나와야하는 경우 label 을 사용할 수 있다.
for
문에 label을 달고 상황에 맞게 break
키워드를 사용한다.
'outer: for x in 5..50 {
println!("x => {}", x);
for y in 0..10 {
println!("y => {}", y);
if x == y {
break 'outer;
}
}
}
println!("빠져나왔다.");
실행 결과
x => 5
y => 0
y => 1
y => 2
y => 3
y => 4
y => 5
빠져나왔다.
루프 label은 아스트로피(`)를 사용하는데, 이는 lifetime의 구문과 유사하지만 전혀 다르며 명확히 구분된다.
'Dev > Language' 카테고리의 다른 글
impl Trait과 Box<dyn Trait> - Rust 프로그래밍 (1) | 2022.12.19 |
---|---|
Cell 타입과 RefCell 타입 - Rust 프로그래밍 (1) | 2022.11.26 |
Rc 타입과 Weak 타입 - Rust 프로그래밍 (4) | 2022.10.29 |
소유권(Ownership)과 원시 타입 - Rust 프로그래밍 (0) | 2022.08.29 |
트레잇(Trait)과 트레잇 바운드(Trait Bound) - Rust 프로그래밍 (1) | 2022.08.25 |