스위프트 반복문(Swift Loof)
맥과 아이폰 어플리케이션는 스위프트(Swift) 라는 언어로 만들 수 있습니다. 애플(Apple)에서 만든 언어이니 뭐 당연하겠지요. 그 중에서도 대중에게 많이 알려진 이유는 아이폰 앱을 만들 수 있기 때문입니다. 고로 스위프트(Swift)는 아이폰 앱을 만들기 위해서는 반드시 알고 있어야 하는 언어입니다.
특히 특정 연산을 반복하거나 리스트와 같이 여러개의 항목을 보여주기 위해서 반복문은 프로그래밍에서 거의 '항상' 쓰인다고 말해도 과언이 아닙니다. 대표적인 반복문 For(), while() 입니다.
For()
반복해야 하는 횟수를 알고 있을 때 사용하는 반복문입니다. 이를테면, 배열 또는 리스트를 순회할 때 쓸 수 있습니다.
for index in 0...10 { //0번째부터 10번째까지 반복
print("\(index)번째")
}
ClosedRange 가 적용된 반복문입니다. CloseRange 는 0 ... 10 과 같이 쓰며, 끝 번호를 포함하는 것을 말합니다.
즉, 0, 1, 2, 3 ... 10 까지 반복하는데, index 라는 변수에 0 ~ 10까지 값을 넘기면서 출력합니다.
for index in 0..<10 { //0번째부터 9번째까지 반복
print("\(index)번째")
}
HalfClosedRange가 적용된 반복문입니다. HalfColoseRange는 0 ..< 10 과 같이 쓰며, 끝 번호를 포함하지 않는 것을 말합니다.
ClosedRange 와의 차이가 보이시나요? 프로그래밍에서 숫자의 시작은 1이 아닌 0이기 때문에 만약 0~10까지 출력한다면 총 11번이 출력됩니다. 그래서 마지막 숫자는 포함하지 않는 방식 역시 필요하지요.
let closedRange = 0...10
for i in closedRange where i % 2 == 0{ //짝수만 출력
print("i의 짝수 : \(i)")
}
스위프트에는 조금 독특한 기능이 있습니다. 바로 where 인데요. 위 코드와 같이 특정 조건을 만족하는 값만 출력할 수 있도록 할 수 있습니다. 위 코드는 0부터 10까지 출력하는데, 2로 나누어 떨어지는, 즉 짝수만을 출력합니다. 반대로 홀수도 가능하겠죠?
let closedRange = 0...10
for i in closedRange {
if i == 4 { //특정 숫자 제외
continue
}
if i == 6 { //특정 시점에서 반복 중지!
break
}
print("4 제외 : \(i)")
}
반복문을 사용하다보면, 특정 시점에 반복문을 빠져나가야 하거나 건너 뛰어야 하는 일이 많습니다. 이때 사용할 수 있는 키워드는 continue 와 break 입니다. continue 는 해당 조건을 건너뛰라는 뜻이며, break 는 For() 의 종료를 뜻합니다.
While()
For()는 반복해야 하는 횟수를 알고 있을 때 쓰지요?
반면에 While() 은 For()를 대신해서 쓸 수도 있지만, '반복해야 하는 횟수를 모를때' 사용하는 반복문입니다.
var i = 0
while i < 100 { // i 가 5보다 작은 동안만 반복!
i += 1
print("\(i) 번째 출력!")
}
먼저 기본적인 사용법을 보면, 반복 조건을 주고 조건을 만족하는 한 반복합니다. 위 예제는 100번이 되지 않는 한 반복한다는 뜻이 되겠지요? 하지만 아래 처럼 사용할 수도 있습니다.
var i = 0
while true { //true (조건이 항상 만족하기에 끝없이 반복)
i += 1
print("\(i) 번째 출력")
}
역시 100 번을 출력할 수 있지요. 그런데 문제는 100번, 1000번, 10000번 그 이상을 출력할 때까지 반복한다는 것입니다. 그럼 결국 우리의 앱은 '무한루프' 에 빠지게 됩니다. 그래서 우리는 다음과 같이 while()을 작성해주어야 합니다.
var i = 0
while true {
i += 1
if i > 100 { //while() 에서는 반드시 탈출 조건이 필수!
break
}
print("\(i) 번째 출력!")
}
이제 while() 은 변수 i 가 100를 넘게되면 break 에 걸려 종료됩니다. 이처럼 while() 에는 항상 옳은 상태인 true 를 조건으로 줄 수 있습니다. 그리고 실제로 true 를 조건으로 하는 경우도 많습니다. 단! 반드시 하나는 지켜져야 합니다.
위 예제처럼 '무한루프'에 빠지지 않기 위해서 while()은 반드시 탈출 조건이 있어야합니다.
감사합니다.