안녕하세요~ 차니에요!
오늘은 지난 조건문편에 이어서 반복문에 대해 알아보도록 하겠습니다~
반복문은 말 그대로 무언가를 반복하는 명령어입니다.
반복문에서는 continue와 break를 통해 반복 제어가 가능합니다.
- continue : continue 아래 코드를 실행시키지 않고 다음 반복을 시작함
- break : 반복문을 멈춤
* 샘플 데이터
struct Person {
var name: String
let age: Int
let gender: Gender
enum Gender{
case male, female
}
}
지난 시간에 사용했던 데이터를 더 추가해서 사용해보겠습니다.
let channy = Person.init(name: "channy", age: 28, gender: .male)
let andrew = Person.init(name: "andrew", age: 22, gender: .male)
let linda = Person.init(name: "linda", age: 25, gender: .female)
let betty = Person.init(name: "betty", age: 34, gender: .female)
let brian = Person.init(name: "brian", age: 30, gender: .male)
let memberList: Array<Person> = [channy, andrew, linda, betty, brian]
회원 목록에 5명의 가상 인물을 대입하였습니다.
1. for-in
for {item} in {items}
for member in memberList {
print(member.name)
}
items에는 순회할 Array, Dictionary 등이 들어가고 item에는 items[startIndex] ~ items[endEndex]까지 값이 대입되며 순회합니다.
그렇다면 요소뿐만 아니라 인덱스까지 사용하고 싶은 경우 for-in 사용법은 어떻게 될까요??
1-1. enumerated
(n, x) 쌍의 시퀀스를 반환한다고 나와있습니다.
n은 index, x는 element로 사용할 수 있습니다.
for (i, mem) in memberList.enumerated() {
print("\(i) : \(mem.name)")
}
1-2. indices
for i in memberList.indices {
print("\(i) : \(memberList[i].name)")
}
memberList의 인덱스를 차례로 가져와서 이름을 출력해주었습니다.
실행 결과는 1-1과 동일합니다.
1-3. count
for i in 0..<memberList.count {
print("\(i) : \(memberList[i].name)")
}
모든 컬렉션의 시작 인덱스는 0인 점을 고려해 0부터 memberList의 크기(count)만큼 순회해주었습니다.
마찬가지로 1-1~3의 실행 결과는 동일합니다.
세 개 다 같은 역할을 하니 편한 방법으로 골라서 쓰시면 될 것 같습니다!
2. forEach
클로저에 대한 부분은 다음에 시간내어 포스팅하도록 하겠습니다.
지금은 사용법과 특징 정도만 이해해주세요!
memberList.forEach({
print($0.name)
})
그렇다면 forEach에서 index는 어떻게 사용할까요?
for-in에서 썼던 enumrated()를 활용해보겠습니다.
memberList.enumerated().forEach({
print("\($0.offset): \($0.element.name)")
})
이렇게 사용하면 offset에 index를, element에 요소를 가져와서 쓸 수 있게 됩니다.
3. for-in과 forEach의 차이
근본적으로 for-in은 반복문이고 forEach는 클로저라는 차이가 있습니다.
- for-in에서는 continue, break가 사용 가능하지만 forEach에서는 불가능합니다.
- for-in에서 return은 함수의 종료를 의미하지만, forEach에서는 클로저의 종료를 의미합니다.
func forIn() {
for (i, member) in memberList.enumerated() {
print("forIn :: \(i)")
if member.age < 30 { return }
}
}
for-in에 대한 코드입니다. 위 코드의 실행 결과가 예측되시나요?
func forEach() {
memberList.enumerated().forEach({
print("forEach :: \($0.offset)")
if $0.element.age < 30 { return }
})
}
이번엔 forEach에 대한 코드입니다.
4. while
var sum:Int = 0
while sum < 10 {
sum += 1
print(sum)
}
while문의 조건이 참(true)인 동안 반복되는 반복문입니다.
조건문의 결과를 보고 실행하기 때문에 조건에 따라 실행이 안 될 수도, 무한히 반복될 수도 있다는 특징이 있습니다.
5. repeat-while
repeat {
sum += 1
print(sum)
} while sum < 10
마찬가지로 while문이 참(true)인 동안 반복되는 반복문입니다.
다만 while문과 달리 조건문의 결과값에 상관없이 최초 1회는 무조건 실행된다는 차이점이 있습니다.
도움이 되셨다면 좋겠습니다.
공감 한 번씩 눌러주세요!