jane1choi/TIL

[Swift] 반복문

Closed this issue · 0 comments

사실 기능 구현을 위한 개발을 하다보면 반복문을 쓸 일이 그렇게 많지는 않은데,
알고리즘 문제를 풀다보니 반복문을 사용해야 하는 경우가 정말 많아서 정확히 잘 몰랐던 부분도 많았다는 것을 느꼈습니다..
이번 기회에 반복문에 대해 확실히 정리하고 넘어가려고 합니다!

반복문(Loop Statements)

주어진 조건에 의해 특정 코드를 반복적으로 실행할 수 있게 해주는 구문입니다.
스위프트에서의 반복문은 반복 횟수가 정해져 있는지를 기준으로 두가지로 나눌 수 있습니다.

  • for 반복문
  • while 반복문

for 반복문

for 반복문은 in 키워드와 함께 사용되어 정해진 횟수만큼 주어진 코드 블록을 반복해서 실행합니다. (횟수에 의한 반복)

for-in 구문

스위프트에서 일정 횟수만큼 특정 구문을 반복하고자 할 때는 for-in 구문을 이용합니다.

for [임시 상수] in [순회 대상] {
      실행 코드
}

기본적으로 for-in 구문을 실행하기 위해서는 임시 상수, 순회 대상, 실행할 코드를 필요로 합니다.
이 중 가장 중요한 것은 순회 대상 입니다!
순회 대상으로는 주로 순번을 가지는 집단 자료형 또는 범위를 가지는 데이터 등이 사용되며, 이 대상의 길이나 내부 아이템의 개수만큼 구문이 반복 수행 됩니다. 순회 대상으로 이용될 수 있는 자료형은 아래와 같은 것들이 있습니다.

  • 배열(Array)
  • 딕셔너리(Dictionary)
  • 집합(Set)
  • 범위 데이터
  • 문자열(String)

문자열은 Character 타입의 데이터들이 모여 이루는 집단적 성격의 데이터들이기 때문에 순회 대상으로 사용할 수 있습니다!
(기존에 범위 데이터를 순회 대상으로 하는 for문을 많이 사용하다 보니 요런 것들에 대해 잘 몰랐움..ㅎ)

예시 코드

for i in 0...2 {
     print(i)
}

// 0
// 1
// 2

for i in 0...5 {
    if i.isMultiple(of: 2) {
        print(i)
        continue    // continue 키워드를 사용하면 바로 다음 시퀀스로 건너뜁니다.
    }
    print("\(i) == 홀수")
}

// 0
// 1 == 홀수
// 2
// 3 == 홀수
// 4
// 5 == 홀수
  • 문자열이 순회 대상인 예시코드
let helloSwift: String = "Hello Swift!"

for char in helloSwift {
    print(char)
}
// H
// e
// l
// l
// o
//
// S
// w
// i
// f
// t
// !
  • 딕셔너리 타입이 순회 대상인 예시코드
let friends: [String: Int] = ["은희": 1, "태현": 2, "승찬": 3]

for tuple in friends {
    print(tuple)
}

/// Dictionary 타입은 순서를 보장하지 않습니다.
// (key: "태현", value: 2)
// (key: "은희", value: 1)
// (key: "승찬", value: 3) 

while 반복문

정해진 횟수만큼 반복하는 for 반복문과는 달리, while 반복문은 주어진 조건(Bool 타입으로 지정되어야 함)이 false가 될 때 까지 계속해서 구문을 반복합니다. (조건에 의한 반복)
따라서 반복 횟수를 예측하기 어려운 경우에 주로 이용되며, for-in 구문과 마찬가지로 continue, break 등의 제어 키워드 사용이 가능합니다.
while 반복문은 while 구문과 repeat-while 구문으로 나뉘어집니다.

while 구문

while 구문은 조건을 만족하는 동안 계속 실행됩니다.
따라서, 다음과 같은 경우에 사용할 수 있습니다.

  • 실행 횟수가 명확하지 않은 경우
  • 직접 실행해보기 전까지는 실행 횟수를 알 수 없을 때
  • 실행 횟수를 기반으로 할 수 없는 조건일 때
while [조건식] {
    실행코드
}

조건식의 결과값은 true 혹은 false 로 반환해야 하면 false일 경우 반복문의 실행은 종료되고 코드 블럭을 빠져나갑니다.

예시코드

var n = 1024

while n <= 1000 {
    n *= 2
}

// n의 최종값은 1024

repeat-while 구문

다른 프로그래밍 언어의 do-while 구문에 해당하는 구문입니다.
repeat 블록의 코드를 최초 1회 실행한 후, while 다음의 조건이 성립하면 블록 내부의 코드를 반복 실행합니다.
즉, 처음부터 조건식의 결과값이 false를 반환하여도, 적어도 한 번은 코드 블럭을 실행하는 것을 보장한다는 특성을 가집니다.

repeat {
    실행코드
} while [조건식]

예시 코드

var n = 1024

repeat {
    n *= 2
} while (n < 1000)

// n의 최종값은 2048