이번 시간에는 예전에 다뤘던 Swift의 제어문에 대해서 좀 더 자세히 알아보고 예제와 함께 정리해보려고 합니다! 예전에 작성하였던 제어문 글은 링크로 남겨둘테니 관심 있으신 분은 같이 보셔도 좋습니다!
https://zeromin-code.tistory.com/35
for문
Swift에서 for 반복문은 for-in 반복문이라고도 불립니다. 그 이유는 for문의 구조를 살펴보면 알 수 있습니다.
for문의 구조를 살펴보도록 하겠습니다.
for 상수명 in 컬렉션 또는 범위 {
실행될 코드
}
이렇게 for in을 사용하기 때문에 for-in문이라고 불립니다. '상수명'은 반복문이 돌면서 컬렉션 또는 범위에서 가져온 항목을 담게 될 상수이며, for문에서 주의해야 할 점은 for문 다음의 실행 코드가 한 줄이라도 괄호({})를 필수적으로 사용해야 한다는 점입니다.
'컬렉션 또는 범위'는 반복문이 반복되면서 현재의 항목을 참조합니다.
for문의 예제를 살펴보도록 하겠습니다.
for i in 1...5 {
print("\(i) 안녕")
}
이 코드는 1부터 5까지의 숫자를 반복하면서 "안녕"이라는 문자열을 출력하는 역할을 합니다.
반복문은 중괄호({}) 안에 있는 코드 블록을 여러 번 실행하는 제어 구조입니다.
for i in 1...5 부분은 i라는 변수를 사용하여 1부터 5까지의 범위를 나타냅니다. ... 연산자는 시작 값과 끝 값을 포함하는 범위를 생성합니다.
반복문의 각 단계에서 print("\(i) 안녕") 구문이 실행됩니다.
\() 문법은 문자열 내에서 변수나 상수 값을 사용하기 위해 사용됩니다. 따라서 각 단계에서 i의 값과 "안녕" 문자열이 조합되어 출력됩니다.
따라서 위의 코드를 실행하면 다음과 같은 결과가 출력됩니다.
만약에 소스 코드에서 i라는 변수가 쓰이지 않는다면 그 자리에 UnderScore(_)를 사용해서 참조체(i)를 생략할 수도 있습니다. 아래처럼 말이죠!
for _ in 1...5 {
print("안녕")
}
while 반복문
for문은 몇 번 반복해야 하는지 이미 아는 경우에는 사용하기에 적합하지만 반대로 어떠한 조건이 되기 전에 몇 번을 반복해야 할지 알 수 없을 때는 while문을 사용합니다.
먼저 while문의 구조를 살펴보겠습니다.
while 조건식 {
반복 코드
}
우선 구조는 이렇게 되고 myCount 변수가 1000보다 크지 않을 때까지 반복되고 1000이 되는 시점에 반복문이 종료되는 소스를 만든다면 아래처럼 만들어집니다.
var myCount = 0
while myCount < 1000 {
myCount+=1 }
print(myCount) //결과 : 1000
break문
break 문은 제어 흐름을 중단하고 반복문이나 스위치문을 빠져나오는 데 사용됩니다. break 문은 현재 실행 중인 반복문 또는 스위치문의 실행을 즉시 종료하고 다음 코드로 이동합니다.
반복문 내에서 break 문을 사용하면 반복문의 실행이 즉시 중단되며, 다음 반복 단계로 넘어가지 않고 반복문 바깥으로 나옵니다. 이를 통해 특정 조건이 충족되었을 때 반복을 종료할 수 있습니다.
아래는 break 문의 간단한 예제입니다.
for i in 1...10 {
if i == 5 {
break
}
print(i)
}
여기서 주의해야 할 점은 if문 다음의 실행 코드가 여러 줄이 아니라 한 줄 뿐이라도 괄호를 필수적으로 사용해야 한다는 점입니다. 이 부분은 if문 설명해서 다시 하도록 하겠습니다.
continue문
continue 문은 반복문 내에서 사용되며, 현재 반복 단계를 건너뛰고 다음 반복 단계로 진행하는 데 사용됩니다. continue 문을 만나면 남은 코드를 실행하지 않고, 다음 반복 단계로 이동합니다.
반복문 내에서 continue 문을 사용하면 특정 조건이 충족되었을 때 해당 반복 단계를 건너뛰고 다음 단계로 넘어갈 수 있습니다. 이는 특정 조건에 해당하는 경우에만 일부 작업을 건너뛰고자 할 때 유용합니다.
아래는 continue 문의 간단한 예제입니다.
for i in 1...10 {
if i % 2 == 0 {
continue
}
print(i)
}
위의 코드는 1부터 10까지의 숫자 중 홀수인 숫자만 출력하는 예제입니다. i % 2 == 0 조건은 i가 짝수인지 확인합니다. 만약 조건이 참이라면, 즉 짝수일 경우에는 continue 문이 실행되어 남은 코드를 건너뛰고 다음 반복 단계로 넘어갑니다. 따라서 출력 결과는 다음과 같습니다.
if문
Swift에서의 if문은 다른 프로그래밍 언어들과는 다르게 if문 다음의 실행 코드가 단 한 줄이라도 중괄호({})를 필수적으로 사용해야 합니다.
기본적으로 '불리언 표현식'이 참(true)으로 판단되면 중괄호로 감싸인 코드를 실행합니다. 반대로 '불리언 표현식'이 거짓(false)이면 중괄호로 감싸인 코드는 건너뛰게 됩니다.
if문 조건에서 콤마(,)는 AND(&&)의 의미를 갖게 됩니다.
예제를 보겠습니다.
var a = 1
var b = 2
var c = 3
var d = 4
if a < b && d > c {
print("yes")
}
if a < b, d > c {
print("yes")
}
첫 번째 if 문은 다음과 같은 조건을 확인합니다: a < b && d > c. 이는 변수 a가 변수 b보다 작고, 동시에 변수 d가 변수 c보다 큰지를 검사합니다. 만약 이 조건이 참이라면, 즉 양쪽 모두 참인 경우에는 "yes"라는 문자열이 출력됩니다.
두 번째 if 문은 스위프트 5.3부터 도입된 새로운 문법으로, 콤마(,)를 사용하여 여러 개의 조건을 한 줄에 나열할 수 있습니다. 따라서 위의 코드에서 콤마(,)를 사용한 두 번째 if 문도 첫 번째와 동일한 결과를 출력합니다.
즉, 위의 코드에서는 변수 a가 b보다 작고, d가 c보다 큰지를 확인하고 해당 조건이 참인 경우 "yes"라는 문자열이 출력됩니다.
if-else문
if-else문은 다른 언어와 크게 다른 부분이 없기도 하고 예전에 정리한 부분이 있기도 하니 바로 예제로 넘어가보도록 하겠습니다.
let weight = 60.0
let height = 170.0
let bmi = weight / (height*height*0.0001) // kg/m*m
var body = ""
if bmi >= 40 {
body = "3단계 비만"
} else if bmi >= 30 && bmi < 40 {
body = "2단계 비만"
} else if bmi >= 25 && bmi < 30 {
body = "1단계 비만"
} else if bmi >= 18.5 && bmi < 25 {
body = "정상"
} else {
body = "저체중"
}
print("BMI:\(bmi), 판정:\(body)")
이 소스는 if-else문을 이용한 BMI 계산 결과 판정 소스입니다. 이 소스는 switch-case문으로 변경할 수 있는데 이 내용은 밑에서 살펴보도록 하겠습니다.
switch-case문
switch-case 문은 여러 가지 경우(case)에 따라 코드의 분기를 수행하는 제어문입니다. switch 문은 주어진 값 또는 표현식을 평가하고, 해당 값이나 표현식과 일치하는 경우에 해당하는 케이스 블록을 실행합니다. switch-case문은 각 case를 콤마(,)로 연결할 수 있습니다.
switch-case문의 구조는 아래와 같이 되어 있습니다.
switch 표현식 {
case match1:
구문
case match2:
구문
case match3, match4:
구문
default:
구문
}
여기서 주의할 점은 각 case문 마지막에 break가 자동으로 들어 있다는 점입니다. 이 부분을 유의해서 switch-case문을 사용하면 됩니다. switch-case문의 간단한 예제를 살펴보고 아까 보았던 BMI 소스 코드를 바꿔보겠습니다.
var value = 0
switch (value)
{
case 0:
print("영")
case 1:
print("일")
case 2:
print("이")
case 3:
print("삼")
default:
print("4이상")
}
아까 if-else문에서 봤던 BMI 소스를 switch-case문으로 변경하면 아래와 같이 되는데 다른 방법도 존재하니 다른 방법도 직접 찾아보시면 좋을 것 같습니다!
let weight = 60.0
let height = 170.0
let bmi = weight / (height*height*0.0001) // kg/m*m
var body : String
switch bmi {
case ..<18.5:
body = "저체중"
case 18.5..<25:
body = "정상"
case 25..<30:
body = "1단계 비만"
case 30..<40:
body = "2단계 비만"
default:
body = "3단계 비만"
}
print("BMI:\(bmi), 판정:\(body)")
//BMI:20.761245674740483, 판정:정상
where절
where 절은 조건문과 반복문에서 추가적인 조건을 지정하는 데 사용됩니다. where 절은 if, guard, for-in, while, switch 등의 문맥에서 사용할 수 있습니다.
where 절은 기존의 조건에 추가적인 조건을 붙여 세부적인 검사를 수행할 수 있도록 합니다. 이를 통해 코드의 가독성을 높이고 특정 조건에 따라 동작을 제어할 수 있습니다.
예제를 살펴보도록 하겠습니다.
var temperature = 60
switch (temperature)
{
case 0...49 where temperature % 2 == 0:
print("Cold and even")
case 50...79 where temperature % 2 == 0:
print("Warm and even")
case 80...110 where temperature % 2 == 0:
print("Hot and even") default:
print("Temperature out of range or odd")
}
위 예제는 where 절을 사용하여 추가적인 조건을 지정하고, 범위 연산자(...)를 사용하여 온도 범위를 지정합니다.
첫 번째 케이스(case)는 0부터 49 사이의 짝수인 경우에 해당합니다. where 절은 temperature % 2 == 0 조건을 추가로 검사하며, 이는 온도가 짝수인지 확인합니다. 따라서 "Cold and even"이라는 문자열이 출력됩니다.
두 번째 케이스는 50부터 79 사이의 짝수인 경우에 해당합니다. 마찬가지로 where 절은 temperature % 2 == 0 조건을 검사하며, 이는 온도가 짝수인지 확인합니다. 따라서 "Warm and even"이라는 문자열이 출력됩니다.
세 번째 케이스는 80부터 110 사이의 짝수인 경우에 해당합니다. 역시 where 절은 추가적인 조건으로 온도가 짝수인지 확인합니다. 그러므로 "Hot and even"이라는 문자열이 출력됩니다.
위의 세 가지 케이스에 모두 해당하지 않으면 기본(default) 케이스로 이동하여 "Temperature out of range or odd"라는 문자열을 출력합니다. 따라서 위의 코드에서 변수 temperature 값에 따라 각각 다른 메시지가 출력되게 됩니다.
이번시간에는 Swift언어의 제어문에 대해서 조금 더 자세히 예제와 함께 살펴보았습니다. 제어문은 이미 한 번 다룬 적이 있으니 해당 글과 함께 보셔도 좋을 것 같습니다!
감사합니다.
'Apple > Swift' 카테고리의 다른 글
[Swift] 지연 저장 프로퍼티(Lazy Stored Properties) (0) | 2023.10.05 |
---|---|
[Swift] 함수에 대한 개념과 다양한 예시 소스 (0) | 2023.09.29 |
[Swift] 업캐스팅과 다운캐스팅, Swift와 Kotlin 옵셔널의 차이 (0) | 2023.09.25 |
[Swift] 옵셔널과 Nil합병 연산자 (0) | 2023.09.23 |
[Swift] Type Safety 개념, 옵셔널의 개념과 예시 (0) | 2023.09.19 |