안녕하세요.
오늘은 Swift의 제어문과 guard문, switch문, where절에 대해 알아보겠습니다.
다른 언어와 큰 차이점은 없어 쉽게 넘어갈 수 있었습니다.
포스팅도 긴 설명보다는 예제를 통해 알아보는 부분이 많을 것 같네요.
그럼 시작하겠습니다.
참고 자료
Apple Swift Document
https://developer.apple.com/documentation/swift
해당 포스팅은 Smile Han님의 유튜브 영상을 참고하며 작성하였습니다.
https://www.youtube.com/channel/UCM8wseo6DkA-D7yGlCrcrwA
if - else if - else
조건이 참일 때 if문 안의 코드를 실행하고 아니면 else문을 실행합니다.
else if가 있다면 if가 거짓일 때 else if의 조건을 체크합니다.
다른 언어와의 차이점은 if문의 내용이 한 줄일지라도 중괄호를 생략하면 안 됩니다.
생략을 하면 아래와 같이 컴파일 에러가 발생하니 참고해주세요.
var t = 10
if t == 10
print(t)
for
for - in 반복문입니다.
증가되는 값을 사용하지 않는다면 _ 키워드를 사용하여 단순 반복만 할 수 있습니다.
for _ in 1...5 {
print("안녕")
}
범위에 배열이나 Dictonary를 넣으면 배열의 length만큼 반복됩니다.
let items = ["A", "B", "C"]
for item in items {
print(item)
}
// A
// B
// C
let items = ["A": "a", "B": "b", "C": "c"]
for (upper, lower) in items {
print(upper, lower)
}
// A a
// B b
// C c
while
while은 특정 조건을 충족할 때까지 반복을 시켜야 하는 상황에서 for문보다 유용하게 사용할 수 있습니다.
var t = 0
while t < 100 {
t = t + 1
}
print(t) // 100
repeat-while
자바의 do-while문과 동일합니다.
Swift에서도 Swift 1까지는 do-while이었으나
언어의 직관성을 위해 repeat-while로 이름을 바꿨다고 합니다.
반드시 1회는 실행을 하고 조건이 맞으면 추가 반복을 합니다.
var t = 5
repeat {
t = t-1
print(t, terminator: "")
} while (t > 0)
//43210
break
특정 타이밍에 반복문을 탈출하고 싶을 때 사용합니다.
다른 언어와 사용법은 동일합니다.
continue
특정 타이밍에 반복문의 상단 시작 위치로 돌아가고 싶을 때 사용합니다.
다른 언어와 사용법은 동일합니다.
guard
guard문은 Swift 2에 도입된 구문입니다.
guard문의 조건이 거짓이면 else 절을 수행합니다.
guard문의 else 절에 속한 코드는 현재의 흐름을 나갈 수 있는 return, break, continue, throw 등의 구문을 반드시 포함해야 합니다.
즉, 매번 사용할 수 있는 구문은 아니고 특정 상황(반복문 내부, 함수 내부...)에서만 사용 가능합니다.
func printPrice(name:String, price:Int) {
guard price > 0 else { //priece가 0 이하이면 else절을 실행한다.
print("\(name)은 무료입니다.")
return
}
print(name, price) //price가 0보다 크면 guard 이후의 코드를 실행한다.
}
printPrice(name: "Jeong", price: 0)
printPrice(name: "Ju", price: 10)
if-else와 성능상의 차이점은 없습니다.
사용 이유를 찾아보니 guard문을 사용하면 if-else보다 early exit에 대한 가독성이 증가한다는 의견이 있습니다만
이것조차 의견이 갈리는 것 같습니다.
guard문을 사용해보시고 취향에 맞게 사용하시면 될 것 같습니다.
switch-case
Swift의 switch-case문은 각 case문 마지막에 break가 자동으로 들어있습니다.
따라서 개발자가 직접 break를 안 넣어줘도 됩니다.
주의할 점은 case의 body가 empty면 안 됩니다.
var value = 3
switch(value) {
case 1:
print("value is 1")
case 2:
case 3:
print("value is 3")
default:
print("others")
}
다른 조건에서 동일한 코드를 실행해야 한다면 아래 코드처럼 하시면 됩니다.
var value = 3
switch(value) {
case 1, 2:
print("value is 1 or 2")
case 3:
print("value is 3")
default:
print("others")
} // value is 3
개발자가 break를 하지 않고 다음 case문을 실행하고 싶을 때가 있습니다.
그럴 때는 fallthrough를 사용하면 됩니다.
var value = 0
switch(value) {
case 0:
print("value is 0")
fallthrough
case 1:
print("value is 1")
default:
print("others")
}
where
switch-case, if, while, guard, for 등에 조건을 추가하고 싶다면 where 절을 사용하면 됩니다.
switch-case를 예시로 들어보겠습니다.
var value = 7
switch(value) {
case 0...5 where value % 2 == 0:
print("0 <= value <= 5 and Even")
case 6...10 where value % 2 == 0:
print("6 <= value <= 10 and Even")
default:
print("others")
} //others
7은 6과 10 사이의 숫자이지만 짝수가 아니기 때문에 default절을 실행합니다.
이렇게 추가로 조건을 추가하고 싶을 때 where절을 사용하면 됩니다.
오늘은 제어문과 guard, switch-case, where에 대해 알아보았습니다.
난이도가 높지 않아 하나의 포스팅으로 묶어서 양이 꽤 되네요.
자바를 하다 Swift를 하니 비슷한 점도 있고 확실히 편한 점도 있는 것 같습니다.
감사합니다!
아직은 초보 개발자입니다.
더 효율적인 코드 훈수 환영합니다!
공감과 댓글 부탁드립니다.