Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

개발공부 정리 노트

[반복문] for-in문과 while문 본문

iOS/Swift

[반복문] for-in문과 while문

Hyunwoo. 2021. 5. 30. 23:56
반복문이란 프로그램 내에서 특정한 부분의 코드가 반복적으로 수행될 수 있도록 하는 구문입니다.

반복문은 연속된 값, 배열의 아이템, 숫자의 범위, String의 문자들을 반복하기 위해서 사용합니다.

for-in 반복문

for <#item#> in <#items#> {
    <#code#>
}

스위프트에서 코드 스니펫으로 코드를 불러오면 나오는 for-in 반복문의 기본형입니다.

item은 반복상수(Loop Constant)라고 부르며 반복 회차에 해당하는 값이 반복상수(item)에 자동으로 저장됩니다.

예를 들어 ["A", "B"]의 형태의 배열을 items에 넣는다면 첫 번째 회차에는 "A"가 item에 저장되고 두 번째 회차에는 "B"가 item에 저장됩니다. 

items는 범위 표현식으로 범위 표현식에는 반복 범위(range) 또는 컬렉션이 들어갑니다.

 

간단한 예제를 보겠습니다.

for index in 1...5 {
    print(index)
}
// 1
// 2
// 3
// 4
// 5

위의 예제 코드는 1 ~ 5의 범위를 범위 표현식에 넣어 총 5번을 반복하는 코드입니다.

코드를 실행하면 각각의 반복 회차에 해당하는 값이 아래 주석에 작성한 것처럼 순서대로 출력됩니다.

그리고 마지막 회차가 종료되면 반복문이 종료됩니다.

 

for-in 반복문은 두 가지 문법적 특징을 가지고 있습니다.

 

  1. 범위 표현식(items)과 반복상수(item)의 형식은 동일하다.
  2. 와일드카드 패턴(_)을 사용해서 반복상수(item)을 생략할 수 있다.

첫 번째 특징부터 보겠습니다.

let names = ["Anna", "Alex", "Brian", "Jack"]
for name in names {
    print("Hello, \(name)!")
}
// Anna
// Alex
// Brian
// Jack

위의 예제 코드는 4개의 이름이 들어간 배열을 만들고 그 이름들을 순서대로 출력하는 코드입니다.

코드에서 for 문으로 반복하는 컬렉션은 String 배열이고 각각의 요소들은 String 형식입니다. 따라서 반복상수로 전달되는 값도 동일한 String 타입을 가집니다.

 

두 번째 특징인 와일드카드 패턴(_)을 사용하는 예제를 보겠습니다.

for index in 1...5 {
    print("Hello!")
}

위의 예제 코드는 print("Hello!")라는 코드를 5번 반복해서 실행하는 코드입니다.

현재 반복상수를 index라는 이름으로 작성해뒀지만 실제 코드 블럭에서는 사용하지 않고 있습니다.

이럴 때 사용하는 것이 바로 와일드카드 패턴(_)입니다.

 

for _ in 1...5 {
    print("Hello!")
}

이 코드는 방금 전 작성했던 예제 코드와 완전히 동일한 결과를 출력합니다.

 

그렇다면 와일드카드 패턴을 이용하면 어떤 장점이 있을까요?

첫 번째로 반복상수를 사용하지 않는다는 것을 명시적으로 선언하기 때문에 가독성 측면에서 좋습니다.

만약 내가 짠 코드를 다른 사람이 봤을 때 와일드카드 패턴을 이용해서 반복상수를 생략했다면 한눈에 반복상수를 사용하지 않았다는 것을 알 수 있을 것입니다.

 

두 번째로 메모리 공간을 사용하지 않습니다.

반복상수를 선언하면 메모리에 반복상수에 대한 메모리 공간이 생깁니다.

하지만 와일드카드 패턴을 사용하면 불필요한 메모리 공간을 생성하지 않는다는 장점이 있습니다.

 

추가적으로 스위프트 공식 문서에 있는 와일드카드 패턴(_)을 사용한 예제를 보겠습니다.

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"

위의 예제에서 와일드카드 패턴(_)을 사용해서 반복상수를 생략했는데 이는 반복상수가 필요하지 않고 정해진 범위만큼 반복해서 실행하는 것이 중요하기 때문입니다.

코드를 실행하면 처음 회차에 1 = 1*3으로 answer에 3이 들어가고 두 번째 회차에 3 = 3*3으로 answer에 9가 들어갑니다.

power의 값이 10이기 때문에 총 10번을 반복하고 마지막에 answer 변수에 59049라는 값이 들어가며 코드가 종료됩니다.

 

# for-in 반복문 요약

  1. for 키워드 다음에 오는 상수를 반복상수(Loop Constant)라고 부르고 in 키워드 다음에는 반복 범위(range) 또는 컬렉션이 들어간다.
  2. 범위 표현식과 반복상수의 형식은 동일하다.
  3. 와일드카드 패턴(_)을 사용해서 반복상수를 생략할 수 있다.

while 반복문

 

다음으로 while 반복문을 보겠습니다.

while <#condition#> {
    <#code#>
}

스위프트에서 코드 스니펫으로 코드를 불러오면 나오는 while 반복문의 기본형입니다.

while문은 for-in문과 다르게 while 키워드 다음에 조건식이 들어가고 이 조건식에는 true나 false를 리턴하는 불린 표현식이 들어가야 합니다.

while문은 조건식을 먼저 판단하고 조건식이 true로 판단되면 다음에 오는 코드 블럭을 실행합니다.

while문은 조건식(condition)을 false로 판단되기 전까지 계속해서 반복합니다.

바꿔 말하면 조건식(condition)이 true로 판단되면 계속해서 반복문을 실행합니다.

따라서 조건식이 언젠가는 false가 되도록 조건식을 변화시켜야 합니다. 그렇지 않으면 무한 루프에 빠질 수 있습니다.

 

 

간단한 예제를 보겠습니다.

var i = 0
while i < 3 {
    print("Hi")
    i += 1
}

위의 예제 코드는 i 변수가 3 이하면 'Hi'라는 문자열을 출력하는 코드입니다. 

그러면 i += 1의 코드는 무엇일까요?

i += 1은 앞서 설명했던 무한루프에 빠지지 않게 하기 위해서 조건식을 변화시키는 코드입니다.

만약 i += 1을 반복문 내부에 작성하지 않는다면 i < 3이라는 조건식은 영원히 true로 평가됩니다.

그러면 반복문은 종료되지 않고 무한루프에 빠지게 됩니다.

하지만 i에 1을 더해주는 코드를 넣어줌으로써 반복 회차마다 i에 1을 더해주고 i가 3이 되면 조건식이 false로 판단되어 반복문이 종료됩니다.

 

# while 반복문 요약

  1. while 반복문은 while 키워드 다음에 true 또는 false로 판단되는 조건식(condition)이 온다.
  2. while 반복문은 조건식이 false가 될 때까지 반복한다. (true로 판단되는 동안에는 계속해서 반복)
  3. 무한 루프에 빠지지 않도록 조건식을 변화시켜야 한다.

for-in 반복문과 while 반복문은 주로 어떤 상황에서 사용할까요?

for-in 반복문은 주로 정해진 범위 안에서 반복할 때 사용합니다.

while 반복문은 반복할 횟수를 예측하기 힘들 때 사용합니다.


for-in 반복문과 while 반복문을 비교하기 위해 두 반복문으로 1에서 30까지 짝수를 더하는 코드를 짜 보겠습니다.

 

* 여기서 isMultiple(of: )는 (of: )의 들어가는 값의 배수이면 true를 리턴하는 메서드입니다.

예를 들어 인자값으로 2를 넣으면 호출하는 값이 2의 배수이면 true를 리턴합니다.

 

for-in 반복문

var sum = 0
for i in 1...30 {
    if i.isMultiple(of: 2) {
        sum += i
    }
}

print(sum) // 240

for-in 반복문은 정해진 횟수만큼 반복하기 때문에 1 ~ 30까지의 범위를 설정해주고 조건에 맞는 값을 더해주면 됩니다.

 

while 반복문

var sum = 0
var i = 0
while i < 31 {
    if i.isMultiple(of: 2) {
        sum += i
    }
    
    i += 1
    
}

while 반복문은 조건이 true면 계속해서 반복하기 때문에 for-in 반복문과 동일한 코드를 작성하면 무한루프에 빠질 수 있습니다.

따라서 조건식을 변화시킬 수 있는 코드를 따로 작성해줘야 합니다.

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

IUO(Implicitly Unwrapped Optionals)  (0) 2021.06.06
[조건문] if  (0) 2021.05.13
Comments