🔥 for-In 루프
Swift에서는 for
-in
루프를 사용하여 배열의 요소, 숫자의 범위 또는 문자열의 문자와 같은 시퀀스를 반복할 수 있답니다.
다음 예제는 for
-in
루프를 사용하여 배열의 항목을 반복하는 방법을 보여줍니다:
let names = ["Anna", "Alex", "Brian", "Jack"] for name in names { print("Hello, \(name)!") } // Hello, Anna! // Hello, Alex! // Hello, Brian! // Hello, Jack!
swift
이 코드는 names
배열의 각 요소를 반복하면서, 루프 내에서 name
상수를 사용하여 현재 요소에 접근할 수 있게 해줍니다. 그리고 print()
함수를 사용하여 각 이름을 출력하고 있죠.
for
-in
루프는 딕셔너리의 키-값 쌍에 접근하는 데에도 사용할 수 있습니다. 딕셔너리를 반복할 때 각 항목은 (key, value)
튜플로 반환되며, for
-in
루프 본문 내에서 사용할 명시적으로 명명된 상수로 (key, value)
튜플의 멤버를 분해할 수 있습니다. 아래 코드 예제에서 딕셔너리의 키는 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
swift
Dictionary
의 내용은 본질적으로 순서가 없으며, 반복해도 검색되는 순서가 보장되지 않습니다. 특히 Dictionary
에 항목을 삽입하는 순서는 반복되는 순서를 정의하지 않습니다. 배열과 딕셔너리에 대한 자세한 내용은 Collection Types을 참조하세요.
숫자 범위에 대해서도 for
-in
루프를 사용할 수 있습니다. 다음 예제는 5단 곱셈표의 처음 몇 개 항목을 출력합니다:
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
swift
반복되는 시퀀스는 닫힌 범위 연산자(...
)로 표시된 대로 1
부터 5
까지의 숫자 범위입니다. index
의 값은 범위의 첫 번째 숫자(1
)로 설정되고 루프 내부의 문이 실행됩니다. 이 경우 루프에는 현재 index
값에 대한 5단 곱셈표의 항목을 출력하는 하나의 문만 포함되어 있죠. 문이 실행된 후 index
의 값은 범위의 두 번째 값(2
)을 포함하도록 업데이트되고 print(_:separator:terminator:)
함수가 다시 호출됩니다. 이 프로세스는 범위의 끝에 도달할 때까지 계속됩니다.
위의 예에서 index
는 루프의 각 반복 시작 시 값이 자동으로 설정되는 상수입니다. 따라서 index
를 사용하기 전에 선언할 필요가 없습니다. let
선언 키워드 없이 루프 선언에 포함시키는 것만으로 암시적으로 선언됩니다.
시퀀스의 각 값이 필요하지 않은 경우 변수 이름 대신 밑줄을 사용하여 값을 무시할 수 있습니다.
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"
swift
위의 예는 한 숫자를 다른 숫자의 거듭제곱으로 계산합니다(이 경우 3
을 10
제곱). 1
부터 10
까지의 닫힌 범위를 사용하여 시작 값 1
(3
의 0
제곱)에 3
을 10번 곱합니다. 이 계산의 경우 루프를 통해 각 카운터 값은 불필요합니다. 코드는 단순히 올바른 횟수만큼 루프를 실행하죠. 루프 변수 대신 사용된 밑줄 문자(_
)는 개별 값을 무시하고 루프의 각 반복 중에 현재 값에 대한 접근을 제공하지 않습니다.
어떤 상황에서는 두 끝점을 모두 포함하는 닫힌 범위를 사용하고 싶지 않을 수도 있습니다. 시계 면에 매분 눈금을 그리는 것을 고려해 보세요. 0
분부터 시작하여 60
개의 눈금을 그리고 싶습니다. 하한은 포함하지만 상한은 포함하지 않는 반개방 범위 연산자(..<
)를 사용하세요. 범위에 대한 자세한 내용은 Range Operators를 참조하세요.
let minutes = 60 for tickMark in 0..<minutes { // render the tick mark each minute (60 times) }
swift
일부 사용자는 UI에서 더 적은 눈금을 원할 수 있습니다. 그들은 5분마다 하나의 표시를 선호할 수 있죠. 원하지 않는 표시를 건너뛰려면 stride(from:to:by:)
함수를 사용하세요.
let minuteInterval = 5 for tickMark in stride(from: 0, to: minutes, by: minuteInterval) { // render the tick mark every 5 minutes (0, 5, 10, 15 ... 45, 50, 55) }
swift
stride(from:through:by:)
를 사용하면 닫힌 범위도 사용할 수 있습니다:
let hours = 12 let hourInterval = 3 for tickMark in stride(from: 3, through: hours, by: hourInterval) { // render the tick mark every 3 hours (3, 6, 9, 12) }
swift
위의 예제들은 범위, 배열, 딕셔너리 및 문자열을 반복하기 위해 for
-in
루프를 사용합니다. 그러나 이 구문은 해당 유형이 Sequence
프로토콜을 준수하는 한 사용자 정의 클래스 및 컬렉션 유형을 포함한 any
컬렉션을 반복하는 데 사용할 수 있습니다.
이렇게 for
-in
루프를 사용하면 다양한 종류의 시퀀스를 손쉽게 반복할 수 있답니다. 배열이나 딕셔너리같은 컬렉션부터 숫자 범위, 문자열의 문자까지 폭넓게 활용할 수 있죠. 그리고 stride
함수를 이용하면 원하는 간격으로 시퀀스를 건너뛰면서 반복할 수도 있습니다. for
-in
루프는 Swift에서 꼭 알아두면 좋을 강력한 기능 중 하나랍니다!