Swift

[Swift] 조건문(if-else, switch)과 삼항연산자, if let, guard let

Hatchling.dev 2023. 3. 8. 19:10

(편의상 편한 말투로 작성하는 점 이해 부탁드립니다.😅)

(부정확한 정보가 있을 수 있습니다. 지적 환영🤩)

 

오늘은 조건문에 알아보겠습니당~

겸사겸사 조건문과 비슷한 기능을 하는 것들도 더 알아봅시다.

 

if-else

가장 먼저 if-else문을 알아보도록 하겠습니다.

if-else는 직역하면 알 수 있듯이 만약 ~~라면 OO 아니면 XX 이런 식이라고 생각하면 될 것 같습니다😅

아래 예제는 가장 기본적인 if-else문의 사용방법입니다.

if 조건 {
    조건이 true일 때 실행되는 Code
}
if 조건 {
    조건이 true일 때 실행되는 Code
} else {
    조건이 false일 때 실행되는 Code
}
if 조건1 {
    조건1이 true일 때 실행되는 Code
} else if 조건2 {
    조건1이 false이면서 조건2가 true일 때 실행되는 Code
} else {
    조건이 false일 때 실행되는 Code
}

다른 언어들과 크게 다른 점이 없어보이지만 swift의 if문 조건에는 항상 true OR false가 들어가야 합니다. 간혹 다른 언어의 if 조건에 0 또는 1이 들어가는 경우도 있는데 swift는 안 됩니다😭

 

아래는 간단한 예제입니다.

let animal = "cat"

if animal == "dog" {
    print("강아지")
} else if animal == "cat" {
    print("고양이")
} else {
    print("Error")
}

// 고양이

 

switch

다음은 또 다른 조건문인 switch문 입니다. switch문은 if문과는 다르게 조건에 값이 들어갈 수 있습니다.

맨 위의 case부터 차례대로 검사하고 모든 case가 false일 때 default가 실행됩니다.

아래는 기본적인 사용 방법입니다.

switch 조건대상 {
case 조건1:
    조건1이 true일 때 실행되는 Code
case 조건2:
    조건2이 true일 때 실행되는 Code
default:
    조건1, 조건2 모두 false일 때 실행되는 Code
}

조건 대상에 대한 모든 경우의 수가 case로 작성되어 있다면 default를 생략할 수 있습니다.

let isCheck = true

switch isCheck {
case true: print("참")
case false: print("거짓")
}

아래 switch문은 모든 color에 red, green, blue 외의 값이 들어갈 수 있기 때문에 Switch must be exhaustive라는 Error가 발생합니다. 이런 경우에는 default를 명시해줘야 합니다.

let color = "red"

switch color {
case "red": print("빨강")
case "green": print("초록")
case "blue": print("파랑")
}

아래 예제처럼 범위연산자를 사용할 수 있습니다.

let month = 3

switch month {
case 1...3: print("1분기")
case 4...6: print("2분기")
case 7...9: print("3분기")
case 10...12: print("4분기")
default: print("올바르지 않은 달입니다.")
}

 

삼항연산자

삼항연산자를 사용하면 간단한 조건을 검사할 때 코드가 짧아지고 간편하다는 장점이 있습니다. 다만 조건이 많아질수록 가독성이 급격하게 떨어지기 때문에 상황에 맞게 사용하는게 좋을 것 같습니다.

아래는 간단한 if-else문을 삼항연산자로 변환한 예제입니다. 아래 두 코드의 결과는 같지만 두 번째 코드가 더 간결해 보이네요.

let animal = "cat"

if animal == "dog" {
    print("강아지입니다.")
} else {
    print("강아지가 아닙니다.")
}
let animal = "cat"

animal == "dog" ? print("강아지입니다.") : print("강아지가 아닙니다.")

그럼 조금 더 복잡한 조건문을 삼항연산자로 바꿔볼까요?

아래는 예제를 보면 if문은 코드는 길지만 한눈에 읽기가 쉽고 삼항연산자는 단 한 줄이지만 바로 어떤 코드인지 파악하기가 어렵네요.

이처럼 코드가 짧다고 무조건 좋은 것은 아닙니다. 코드의 길이보다 가독성이 더 중요하다는 점을 유의하여 삼항연산자를 사용하면 좋을 것 같네요!

let animal = "cat"

if animal == "dog" {
    print("강아지")
} else if animal == "cat" {
    print("고양이")
} else if animal == "rabbit" {
    print("토끼")
} else if animal == "pig" {
    print("돼지")
} else {
    print("불명")
}
let animal = "cat"

animal == "dog" ? print("강아지") : animal == "cat" ? print("고양이") : animal == "rabbit" ? print("토끼") : animal == "pig" ? print("돼지") : print("불명")

 

if let, guard let

이번에는 if let과 guard let 입니다.

이 둘은 비슷해 보이지만 다른 점이 있습니다.

if let은 어떤 조건을 검사한다기 보다 옵셔널 변수가 nil인지 값인지 검사하는 문법입니다.

guard let은 어떤 조건이 참이 아닐 때 실행되는 문법입니다.

예제를 통해 어떻게 사용하는지 알아보겠습니다.

 

먼저 if let 입니다. 옵셔널 변수에 값이 있을 땐 dog라는 임시 변수에 옵셔널을 언래핑한 값을 넣어 실행됩니다.

var animal: String? = "dog"

if let dog = animal {
    print(dog) // 실행 됨
}

animal = nil

if let dog = animal {
    print(dog) // 실행 안 됨
}

이번엔 guard let 입니다.

guard let은 참이 아닐 때 실행되는 문법이라고 했죠?? 아래는 animal 변수가 nil이라면 else 구문을 실행 후 함수를 종료하고 값이 있다면 else 구문을 무시하고 출력하는 함수입니다.

func isHaveAnimal() {
    let animal: String? = "dog"
    guard let _ = animal else {
        print("동물이 없습니다.")
        return
    }
    print("동물이 있습니다.")
}

 

그렇다면 if let과 guard let의 차이는 무엇일까요?

if let guard let
옵셔널이 nil인지 확인하고 2분기로 작업할 수 있다. 조건이 false 일 때 else 문 안에서 상위 코드 블럭을 종료해야한다.
지역변수로만 사용할 수 있다. 전역변수로 사용이 가능하다.

 

 

오늘은 이렇게 Swift에서 조건을 처리할 수 있는 다양한 방법들에 대해 알아보았습니다~~~

방법이 여러가지인 만큼 상황에 적절한 문법을 사용할 수 있도록 고민하는 과정이 필요할 것 같습니다😀

'Swift' 카테고리의 다른 글

[Swift] Optional이란?  (0) 2023.06.05
[Swift] 반복문 정리  (0) 2023.03.16
[Swift] Functions(함수) 정리  (0) 2023.03.07
[Swift] Collection Type?  (0) 2023.03.05
[Swift] 기본 데이터 타입과 상수, 변수  (0) 2023.03.04