관리 메뉴

나만을 위한 블로그

[Swift] 반복문 (for-in, while, repeat-while) 본문

iOS/Swift

[Swift] 반복문 (for-in, while, repeat-while)

참깨빵위에참깨빵 2024. 1. 17. 00:18
728x90
반응형

조건문 다음은? 반복문 볼 차례다.

 

https://docs.swift.org/swift-book/documentation/the-swift-programming-language/controlflow/#For-In-Loops

 

Documentation

 

docs.swift.org

아래 코드는 for-in을 써서 배열의 항목을 반복한다
let names = ["Anna", "Alex", "Brian", "Jack"]
for name in names {
    print("Hello, \(name)!")
}
// Hello, Anna!
// Hello, Alex!
// Hello, Brian!
// Hello, Jack!
딕셔너리를 반복해서 키-값 쌍에 접근할 수도 있다. 딕셔너리가 반복될 때 각 항목은 (키, 값) 튜플로 바뀌며 for-in의 본문 안에서 쓰기 위해 (키, 값) 튜플의 멤버를 명시적으로 명명된 상수로 분해할 수 있다. 아래 예시에서 딕셔너리의 키는 AnimalName이란 상수로 분해되고 값은 LegCount 상수로 분해된다
let numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]
for (animalName, legCount) in numberOfLegs {
    print("\(animalName)s have \(legCount) legs")
}
// cats have 4 legs
// ants have 6 legs
// spiders have 8 legs
딕셔너리의 내용은 본질적으로 순서가 없기 때문에 반복된다고 검색 순서가 보장되진 않는다...(중략)...숫자 범위에 for-in을 쓸 수도 있다
for index in 1...5 {
    print("\(index) times 5 is \(index * 5)")
}
// 1 times 5 is 5
// 2 times 5 is 10
// 3 times 5 is 15
// 4 times 5 is 20
// 5 times 5 is 25
시퀀스의 각 값이 필요하지 않다면 변수명 대신 밑줄을 써서 값을 무시할 수 있다
let base = 3
let power = 10
var answer = 1
for _ in 1...power {
    answer *= base
}
print("\(base) to the power of \(power) is \(answer)")
// Prints "3 to the power of 10 is 59049"

 

for문의 형태는 for 뒤에 인덱스 변수를 쓰고 in을 쓴 다음, in 오른쪽에 범위를 넣는 형태다.

범위의 경우 코틀린과 차이나는 부분, 유사한 부분이 보인다.

 

  • 폐쇄 범위 연산자를 ...으로 표현한다. 코틀린은 ..으로 점 1개 차이다
  • 스위프트에서 반복문 안에 "..<" 기호를 쓰면 범위의 마지막 인덱스(=상한)은 포함하지 않고 반복한다. 코틀린도 마찬가지로 "..<" 기호를 써서 상한을 포함하지 않는 범위를 만들어 반복할 수 있다

 

다음은 while 문이다. 스위프트의 while 반복문은 while, repeat-while 2가지 있다.

 

https://docs.swift.org/swift-book/documentation/the-swift-programming-language/controlflow/#While-Loops

 

Documentation

 

docs.swift.org

while 루프는 단일 조건을 평가해서 시작한다. 조건이 true면 false가 될 때까지 반복한다

 

https://docs.swift.org/swift-book/documentation/the-swift-programming-language/controlflow/#Repeat-While

 

Documentation

 

docs.swift.org

repeat-while 루프는 루프 조건을 고려하기 전에 먼저 루프 블록을 통해 단일 패스를 수행한다. 그 후 조건이 false가 될 때까지 반복한다

 

자바/코틀린을 이미 안다면 repeat-while의 설명을 보고 곧바로 do-while과 비슷하다는 생각을 했을 것이다.

사실 스위프트의 repeat-while은 자바/코틀린의 do-while과 동일하게 작동한다. 이름과 사용법만 조금 다를 뿐이다.

 

아래는 간단한 while문의 사용 예시다.

 

var count = 0

while count < 5 {
  print("count : \(count)")
  count += 1
}
print("이제 count는 5보다 작지 않습니다 : \(count)")

// count : 0
// count : 1
// count : 2
// count : 3
// count : 4
// 이제 count는 5보다 작지 않습니다 : 5

 

혹시 첫 프로그래밍 언어가 스위프트라면 잘 모를 수 있으니 위 코드의 작동 순서를 적는다.

 

  1. 처음부터 0이란 정수값을 가진 count 변수를 만든다. var로 선언했기 때문에 count 변수에 들어있는 값은 변할 수 있다
  2. count가 5보다 작은 동안에만 while 블록 내부 코드가 반복하게 조건을 설정한다
  3. 중괄호 안에 실행할 코드를 적는다. 여기선 현재 count 변수에 담긴 값이 뭔지 출력한 다음 count 변수에 1을 더한다. 처음 count 변수에 0이 들어있었으니 0을 출력한 뒤 1을 더해서 count 변수에는 1이 담긴다
  4. count += 1 코드가 호출됐으니 조건으로 돌아가서 count가 5보다 작은지 확인한다. 1은 5보다 작기 때문에 조건은 true가 되고 다시 count 변수를 출력한다
  5. "count : 1"이 출력되고 다시 count 변수에 1을 더한다. 1+1은 2기 때문에 이 직후 count 변수에는 2가 담기게 된다
  6. 다시 조건으로 돌아가서 5보다 작은지 확인한다
  7. 1~6번을 반복한 끝에 count가 5가 된 경우 while의 조건은 false가 된다. while의 조건(count < 5)이 false가 되면 while 루프는 더 이상 작동하지 않고 닫는 중괄호 밖으로 코드 제어권이 이동한다
  8. 닫는 중괄호 바로 다음에 위치한 코드는 "이제 count는 5보다 작지 않습니다"를 출력하는 print 함수기 때문에 이 코드가 호출되며 프로그램이 종료된다

 

백문이 불여일견이다. count +=1 밑에 print를 둬서 count 변수에 1이 더해지는 시점이 언제인지도 확인해 보자.

Xcode를 사용 중이라면 중단점을 찍어서 위 코드의 전체 동작이 어떻게 되는지 확인해 보면 좋다. while의 여는 중괄호부터 닫는 중괄호 이후의 print 함수까지 중단점을 찍고 실행하면 될 것이다.

 

아래는 간단한 repeat-while문의 사용 예시다.

 

var num = 0

repeat {
  print("num : \(num)")
  num += 1
} while num < 5

print("repeat-while 종료. num : \(num)")

// num : 0
// num : 1
// num : 2
// num : 3
// num : 4
// repeat-while 종료. num : 5

 

while과 비교하면 조건을 적는 부분, 반복할 코드를 적는 부분의 위치가 서로 뒤바뀌었다는 차이가 있다. 0~4까지만 반복하고 5가 되면 반복문을 탈출해서 5를 출력하고 프로그램이 종료된다는 흐름은 둘 다 동일하다.

반응형

'iOS > Swift' 카테고리의 다른 글

[Swift] 클래스와 구조체  (0) 2024.02.11
[Swift] 조건문 (if, switch)  (0) 2024.01.15
[Swift] 변수와 상수, 자료형  (0) 2024.01.14
[Swift] Swift란?  (0) 2024.01.11
Comments