주어진 조건에 의해 특정 코드 블록을 반복적으로 실행할 수 있게 해주는 구문을 반복문이라고 한다. 프로그래밍에서 코드 블록의 반복을 루프(Loop)라고 부르고 반복되는 횟수를 루프 횟수라고 부른다.
스위프트에선 루프 횟수가 정해져 있는지를 기준으로 두 가지 방식의 반복문이 존재한다.
- For 반복문
- While 반복문
For 반복문은 in 키워드와 함께 사용되어 정해진 횟수만큼 주어진 코드 블록을 반복해 실행한다.
While 반복문은 주어진 조건이 false가 될 때까지 계속해서 구문을 반복 실행하는 특성이 있다.
for ~ in 구문
for <루프 상수> in <순회 대상> {
<실행할 구문>
}
for ~ in 구문을 구성하는 것은 루프 상수, 순회 대상, 실행할 구문 총 3개로 이루어져있다. 여기서 가장 중요한 것은 순회 대상이다. 순회 대상은 주로 순서를 가지는 집단 자료형 혹은 범위를 가지는 데이터 등이 사용되는데, 이 대상의 길이나 포함하고 있는 아이템의 개수만큼 구문이 반복 수행된다. 순회 대상으로 사용할 수 있는 데이터 타입에는 다음과 같은 것들이 있다.
- 배열(Array)
- 딕셔너리(Dictionary)
- 집합(Set)
- 범위 데이터
- 문자열(String)
여기서 범위데이터가 의미하는 것은 범위 연산자에 의해 규칙적인 간격으로 나열된 정수들의 모음이며, String은 Character 타입의 데이터들이 모여 이루는 집단적 성격의 데이터다.
루프 상수는 구문이 반복될 때마다 순회 대상이 포함하고 있는 개별 아이템들을 차례로 넘겨받아 임의로 저장하고, 실행 블록 내에서 사용할 수 있도록 해주는 역할을 한다. 이 객체는 루프 구문이 순회할 때마다 자동으로 재선언 되므로 let 키워드를 통해 직접 선언할 필요가 없다는 점에 유의해야 한다.
실행 구문은 { } 사이에 작성된다. 중괄호 { }로 둘러싸인 영역을 보통 코드 블록(Code Block)이라고 하는데, 다른 구문과 영역을 나누는 용도로 사용된다. 여기선 반복 실행될 구문의 범위를 표시하는 역할을 한다. 즉, for ~ in 구문의 { } 블록 내에 작성된 구문만 반복해 실행된다는 의미다.
for row in 1...5 {
print(row)
}
/* 실행결과
1
2
3
4
5
닫힌 범위 연산자로 작성된 범위 데이터 1...5는 [1,2,3,4,5]까지의 데이터를 순서대로 생성한 후, row에 최초로 1이 대입되고 실행 구문 print(row)가 실행된다. 그 후 2,3,4,5가 위와 같은 과정을 거쳐 최종적으로 1, 2, 3, 4, 5가 출력되게 된다.
for row in 1...9 {
print("2 X \(i) = \(2 * i)")
}
/* 실행결과
2 X 1 = 2
2 X 2 = 4
.
.
.
2 X 9 = 18
for month in 1...12 {
print("\(month)월")
}
/* 실행결과
1월
2월
3월
.
.
11월
12월
위에서 정의된 루프상수(row, month)는 오직 for ~ in 구문의 실행 블록 내부에서만 사용할 수 있다. 다시 말해, 위 예제에서 정의한 month 변수를 for 블록 밖에서 사용하려고 하면 오류가 발생한다는 것이다.
var language = "swift"
for char in language {
print("개별 문자는 \(char)입니다")
}
/* 실행결과
개별 문자는 s입니다
개별 문자는 w입니다
개별 문자는 i입니다
개별 문자는 f입니다
개별 문자는 t입니다
문자열(String)은 단일 객체로 사용되지만, 구조를 살펴보면 Character 타입의 개별 문자들이 모여 이루어진 객체이다. 개별 문자가 순서를 이뤄 문자열을 구성하므로 순회 대상으로 사용이 가능하다. 또한 자체적으로 순회 처리를 지원하므로 변수를 그대로 넣어주면 된다.
✅ 루프 상수의 생략
for ~ in 구문을 사용할 때 루프 상수가 필요하지 않을 때가 있다. 순회 대상 자체보다는 단순히 순회 대상의 크기만큼 반복하는 것이 목적인 경우이다. 이때에는 '_'를 사용해 루프 상수를 생략할 수 있다.
let size = 5
let padChar = "0"
let keyword = "3"
for _ in 1...size {
keyword = padChar + keyword
}
print("\(keyword)")
/* 실행결과
000003
size 값 만큼 keyword 문자열의 왼쪽에 0을 채워 넣는 구문이다. 주어진 값이 5까지이므로 1부터 5까지 모두 5번 반복 실행되며, 매 실행마다 왼쪽에 0이 추가된다.
✅ for ~ in 구문의 중첩
for ~ in 구문은 중첩하여 사용이 가능하다. 이런 형태를 다중 루프라고 부른다.
for i in 1...9 {
for j in 1...9 {
print("\(i) X \(j) = \(i * j)")
}
}
/* 실행결과
1 X 1 = 1
1 X 2 = 2
1 X 3 = 3
.
.
.
9 X 8 = 72
9 X 9 = 81
바깥쪽 루프는 1부터 9까지 차례로 순회하고, 안쪽 루프 또한 1부터 9까지 차례로 순회한다. i가 1일 때 j가 1부터 9까지 반복 후 다시 i가 2가 되어 j가 1부터 9까지 반복되어 i가 9이고 j가 9가 될 때 i는 10이 될 수 없으므로 위와 같이 반복문이 종료된다.
출처 : 꼼꼼한 재은씨의 Swift 문법편
'Swift > 문법' 카테고리의 다른 글
스위프트(Swift) - 조건문 Ⅰ. if 구문 (0) | 2022.04.29 |
---|---|
스위프트(Swift) - 반복문 Ⅱ. while 구문 (0) | 2022.04.28 |
스위프트(Swift) - 연산자 (0) | 2022.04.26 |
스위프트(Swift) - 멀티 라인 스트링 (0) | 2022.04.25 |
스위프트(Swift) - 타입이 다른 변수끼리의 결합, 문자열 템플릿 (0) | 2022.04.23 |