for
문을 사용하다가 문득 반복문에 종류와 언제 필요한 지도 파악해서 꼭 써먹어보고 싶단 생각이 들었다.
반복문
은 같은 작업을 여러 번 반복할 때 사용하는 구문이다. Swift
에서 반복문은 여러 가지 방식으로 사용할 수 있으며, 크게 세 가지 주요 종류가 있다
for-in
반복문, while
반복문, 그리고 repeat-while
반복문.
각각의 반복문을 간단하게 짚어보려고 한다.
for-in 반복문은 정해진 횟수만큼 반복하거나, 배열이나 리스트 같은 컬렉션의 각 요소를 순차적으로 처리할 때 사용된다.
let numbers = [1, 2, 3, 4, 5]
for number in numbers {
print(number)
}
여기서는 numbers
라는 배열에 들어있는 숫자들을 하나씩 꺼내서 number
라는 변수에 할당하고, 그 값을 출력한다. 결과적으로 1, 2, 3, 4, 5
가 순차적으로 출력된다.
이 반복문은 정해진 범위나 리스트를 순차적으로 처리할 때 매우 유용하다.
while 반복문은 조건이 참일 동안 계속해서 반복되는 구조다. 조건이 거짓이 될 때까지 반복된다.
var count = 1
while count <= 5 {
print(count)
count += 1
}
여기서는 count
가 1
부터 시작해서 5
이하일 때까지 계속 반복되게 되는데, count
가 5
가 될 때까지 숫자를 출력하고 그 후 조건이 거짓
이 되어 반복이 종료된다.
while
문은 반복을 언제 끝낼지 명확하지 않은 경우에 사용될 수 있는데, 조건이 참인 동안만 반복하므로 무한 루프가 될 수 있는 부분은 주의해야 한다.
var count = 1
while count <= 5 {
print(count)
// count를 증가시키지 않음
}
이 예시에서while count <= 5
조건은 항상 참
이다.
count
가 1
로 시작하지만, count
를 증가시키는 코드가 없기 때문에 count
는 계속 1
로 남아있게 되버리는 것이다. 따라서, "1"이 무한히 출력되면서 프로그램이 종료되지 않는다.
또 다른 무한 루프의 예시로, 조건이 항상 참인 경우를 들 수 있다.
while true {
print("이것은 무한 루프입니다.")
}
while true
는 항상 참
이기 때문에, 루프는 종료되지 않고 계속 실행된다.
일반적으로 이런 무한 루프는 특정한 조건에서 종료되도록 설정되어야 하는데 보통은 break
문을 통해 종료된다고 한다. 무한 루프는 프로그램의 흐름을 방해할 수 있으니, 특히 사용자 입력이나 외부 조건을 기다리는 코드에서는 주의해야 할 필요가 있겠다.
예시를 보며 궁금해서 돌려봤다가 맥북 렉 걸려서 당황했다.
repeat-while
은 while
과 비슷한데, 한 번은 반드시 실행된 후 조건을 검사한다는 것이 다르다. 그러니까 최소 한 번은 무조건 실행되는 것이 특징인 것.
var count = 1
repeat {
print(count)
count += 1
} while count > 5
이 예시는 while
과 거의 같지만, 조건
을 검사하기 전에 먼저 print(count)
를 실행한다.
그래서 count
가 1
에서 5
까지 출력된 후 종료된다. repeat-while
은 조건과 상관없이 최소 한 번은 실행해야 할 때 유용하다.
while
과 너무 비슷해서 더 추가로 덧붙이자면, 위 예시에서 count
가 1
로 시작하지만, repeat
가 먼저 실행되기 때문에 1
이 출력된다.
그리고 나서 count > 5
조건을 확인하지만 그건 거짓이므로 루프는 종료되는 것이다.
하지만 무조건 실행이 되는 것이 특징이기에 출력 결과는 1
이다.
두 가지를 요약하자면,,
while
: 조건을 먼저 검사하고, 조건이 거짓이면 실행되지 않음.
repeat-while
: 최소 한 번은 실행된 후 조건을 검사하고, 조건이 거짓이면 종료.그럼 언제 사용할까?
while
: 반복을 시작하기 전에 조건이 충족되는지 확인하고 싶을 때.
repeat-while
: 적어도 한 번은 실행하고 싶을 때.
break 키워드를 사용하면 반복문을 즉시 종료할 수 있다. 특정 조건에서 더 이상 반복할 필요가 없을 때 유용하다.
for number in 1...10 {
if number == 6 {
break
}
print(number)
}
이 예시에서는 숫자가 1부터 10까지 반복되지만, number가 6일 때 break가 실행되어 루프가 종료된다.
결과적으로 1, 2, 3, 4, 5가 출력되고, 6은 출력되지 않는다.
continue
키워드를 사용하면 현재 반복을 건너뛰고 다음 반복으로 이동할 수 있다. 특정 조건에서만 작업을 수행하고 싶을 때 유용하다.
for number in 1...10 {
if number % 2 == 0 {
continue
}
print(number)
}
이 코드에서는 1부터 10까지 반복하면서, 짝수인 경우 continue로 인해 출력하지 않고 건너뛴다.
결과적으로 1, 3, 5, 7, 9가 출력된다.
코드에서
%
는 "나머지 연산자" 다.
number % 2 == 0
는number
를2
로 나눈 나머지가0
인지 확인하는 조건인데, 이 조건이 참이면 그 숫자는 짝수이고, 거짓이면 홀수라는 것.
"항목 건너뛰기"
표현은 루프에서 특정 조건을 만족하는 항목을 건너뛰고, 그 항목에 대한 작업을 생략하겠다는 뜻인데, 특정 항목에 대해 작업을 하지 않고 다음 항목으로 넘어간다는 의미로 이해하면 된다.
for-in 반복문
: 배열이나 범위를 순차적으로 반복.
while 반복문
: 조건이 참일 동안 반복.
repeat-while 반복문
: 최소 한 번은 실행한 후 조건을 검사.
break
: 루프를 즉시 종료.
continue
: 현재 반복을 건너뛰고 다음 반복으로 이동.
반복문은 특정 작업을 여러 번 수행해야 할 때 매우 유용하기 때문에 반복문이 필요한 몇 가지 일반적인 경우를 알아봤다.
let scores = [80, 90, 75, 88]
for score in scores {
print("점수: \(score)")
}
var input: String?
repeat {
print("입력하세요 (종료하려면 'exit' 입력):")
input = readLine()
} while input != "exit"
var number = 1
while number <= 5 {
print(number)
number += 1
}
var gameRunning = true
while gameRunning {
// 게임 상태 업데이트 코드
// 종료 조건이 충족되면 gameRunning을 false로 설정
}
비슷한 코드를 여러 번 작성하는 대신, 반복문을 사용하여 코드를 재사용함으로써 코드의 가독성과 유지보수성을 높일 수 있다고 한다.
let items = ["사과", "바나나", "체리"]
for item in items {
print("과일: \(item)")
}
이와 같은 상황에서 반복문을 사용하면 코드가 더 간결해지고 효율적인 작업을 할 수 있다고 한다.
반복문은 하고자하는 나의 의도를 코드로 표현할 수 있는 방법 중 하나인 것 같다. 효율성과 반복을 통해 무한한 가능성을 열어주는 창과도 같은 느낌? 처음에 반복문을 접했을 때는 그 구조와 사용법이 좀 복잡하게 느껴졌지만, 그래도 여러 예시들을 보면서 그 핵심을 이해할 수 있었고 단순히 코드를 짧게 쓰기 위한 수단이 아니라 특정 작업을 효과적으로 반복 수행할 수 있도록 도와주는 존재임을 알게 되었다.
for-in
반복문은 데이터를 처리하는데 있어 빠르고 직관적인 방법을 제공하니 많은 상황에서 보편적으로 사용 되는 것 같다. while
과 repeat-while
도 조건 따라 유동적으로 실행될 수 있어서 유연한 코딩이 가능하다는 걸 알게 되기도 했고.. 반복문들을 통해 프로그래밍을 하며 발생하는 문제를 해결하는 논리적인 방법을 알게 된 기분이었다. 내가 코드의 흐름을 조절하고 특정한 조건에서 원하는 결과를 얻으려면 어떻게 해야 하는지를 알 수 있게 도와주는 알잘딱깔센 뤂 이라고 해두겠다.
그리고 언젠가무한 루프
나 종료 조건
을 잘 파악하지 못해 실수도 하게 될 것 같다. 아니, 당연하게도 코드를 작성하다보면 분명 실수 할 때가 나올 것이다. 그럴 때 오늘 작성한 이 글을 꼭 보고 다시 되새기려한다.
마치 우리가 인생에서 겪는 반복적인 도전과 같은 기분.
오늘도 이해하기 쉽게 잘 써주셨군요 내일 이걸로 공부해보겠읍니다!