ABOUT ME

삶을 코딩하는 개발자의 사소한 이야기

Today
Yesterday
Total
  • [레인스톤 iOS] 스위프트 easy하게 배워볼까? - 제어문(2)
    Swift 기초문법 2022. 3. 12. 13:29
    반응형

    안녕하세요!

    iOS개발자로 일하고있는 레인스톤입니다:)

     

    오늘은 제어문 2편!

    조건문에 대해서 학습해보겠습니다.

     

    조건문(Conditional Statements)

    Swift에서는 If와 Switch 두 가지 조건문을 제공합니다.

    조건문은 일반적으로 로직의 분기처리가 필요할 때 사용합니다.

     

    If 문

    If 문의 예시부터 살펴볼까요?

     

    var number = 2
    
    func printEvenNumber() {
        print("짝수")
    }
    
    func printOddNumber() {
        print("홀수")
    }

     

    number 값이 짝수라면 printEvenNumber를 호출하고,

    number 값이 홀수라면 printOddNumber를 호출하고 싶을 때!

    이러한 상황에서 조건문을 활용해서 처리해줄 수 있습니다.

     

    if number % 2 == 0 {
        printEvenNumber()
    } else {
        printOddNumber()
    }
    
    // 짝수

     

    매우 간단하게 처리가 가능하죠?

    if에서 number가 짝수일 경우를 가정해주면

    else는 number가 짝수가 아닌 모든 경우에 호출됩니다.

     

    조금 더 이해하기 쉽게 설명하자면

     

    var number = 10
    
    if number == 1 {
        print(1)
    } else {
        print("1이 아닙니다.")
    }
    
    // 1이 아닙니다.

     

    number가 1일 경우를 제외하고는 모두 else 블록이 실행되겠죠?

    이제 이해가 쉽게 되시죠?

     

    근데 조건을 3개 이상 붙이고 싶으면 어떻게 할까요?

     

    var money = 10_000_000_000
    
    if money >= 10_000_000_000 {
        print("슈퍼리치")
    } else if money >= 5_000_000_000 {
        print("리치")
    } else {
        print("ㅠㅠㅠ")
    }
    
    // 슈퍼리치

     

    이런식으로 else if를 활용해서 처리해줄 수 있습니다.

    여기서도 마찬가지로 else 블록은 if와 else if 블록이 실행되지 않는 나머지 모든 경우입니다.

     

    여기서 주의해야할 점!

    현재 moeny(10_000_000_000)는 else if의 조건(5_000_000_000)도 만족해줍니다.

    그런데 왜 if 블록만 실행되고 else if는 실행되지 않았을까요?

     

    if 조건문의 경우 앞의 조건을 만족했을 경우 다음 블록은 실행되지 않습니다.

    즉 다음과 같이 순서를 바꿔준다면(?)

     

    var money = 10_000_000_000
    
    if money >= 5_000_000_000 {
        print("리치")
    } else if money >= 10_000_000_000 {
        print("슈퍼리치")
    } else {
        print("ㅠㅠㅠ")
    }
    
    // 리치

     

    리치만 출력이되고 슈퍼리치는 출력이되지 않습니다:)

    if 구문을 활용할 때는 순서에 주의해서 사용해주세요.

     

    Switch 문

    자, 이제 Switch 문을 살펴보겠습니다.

     

    var number = 2
    
    switch number {
    case 1: print(1)
    case 2: print(2)
    case 3: print(3)
    }
    
    // Switch must be exhaustive

     

    이런식으로 switch에 조건을 비교할 대상을 넣어줍니다.

    그리고 각 case에 조건을 넣어서 비교해주면 됩니다.

     

    위 코드는 number가 1인 경우 1, 2인 경우 2, 3인 경우 3을 출력해주는 로직입니다.

    그런데 Switch must be exhaustive라는 에러와 함께 컴파일이 되지 않습니다.

    무슨 의미일까요?

     

    Switch 문의 경우 모든 조건을 비교하기 위해 default라는 case를 반드시 사용해줘야합니다.

     

    var number = 4
    
    switch number {
    case 1: print(1)
    case 2: print(2)
    case 3: print(3)
    default: print("1, 2, 3 모두 아닙니다.")
    }
    
    // 1, 2, 3 모두 아닙니다.

     

    단, default 없이 모든 경우가 가정되어 있다면?

    default를 생략할 수 있습니다.

     

    var isTodayWeekend = true
    
    switch isTodayWeekend {
    case true: print("주말")
    case false: print("평일")
    }
    
    // 주말

     

    Bool타입의 경우 true가 아니면 false, false가 아니면 true이기 때문에

    true와 false로 모든 경우의 수가 가정됩니다.

    이런 경우에는 default가 없어도 에러가 발생하지 않습니다.

     

    또한 모든 case에 대해서는 최소 하나의 실행 구문이 있어야합니다.

     

    var character = "a"
    
    switch character {
    case "a": print("a")
    case "b": print("b")
    case "c": print("c")
    case "d": print("d")
    default:
    }
    
    // 'default' label in a 'switch' should have at least one executable statement

     

    현재 default case에 실행구문이 없기 때문에 에러가 발생하고 있습니다.

    만약 아무런 구문도 실행하고 싶지 않을 때는 어떻게 해야할까요?

    break를 넣어주면 됩니다.

     

    var character = "a"
    
    switch character {
    case "a": print("a")
    case "b": print("b")
    case "c": print("c")
    case "d": print("d")
    default: break
    }
    
    // a

     

    짠 ~ 이러면 에러 없이 switch 구문이 정상적으로 동작하는 걸 확인할 수 있습니다.

     

    그 외에도 Switch 문에서는 복수 조건, 범위 조건 등도 활용할 수 있습니다.

    복수 조건의 경우 콤마(,)를 활용해줍니다.

     

    var character = "a"
    
    switch character {
    case "a", "A": print("A")
    case "b", "B": print("B")
    case "c", "C": print("C")
    default: break
    }
    
    // A

     

    어렵지 않죠?

    범위 조건도 마찬가지입니다.

    범위 연산자를 통해 간단히 처리할 수 있습니다.

     

    var money = 10_000_000_000
    
    switch money {
        
    case 10_000_000_000... :
        print("슈퍼리치")
        
    case 50_000_000_000..<10_000_000_000:
        print("리치")
        
    default:
        print("ㅠㅠ")
    }
    
    // 슈퍼리치

     

    If 문과 크게 다르지 않죠?

    Switch 문도 If 문과 마찬가지로 하나의 case가 실행되면 break가 자동적으로 실행됩니다.

    (If 문에서 설명한 If가 실행되면 else if 가 실행되지 않는 현상)

    즉 case의 순서에 따라 의도하지 않은 결과가 나올 수 있으니 주의해서 코드를 작성해야합니다.

    끗!

    오늘은 여기까지 ~

    다음 시간에는 제어문 마지막!

    제어 전송 구문으로 돌아오겠습니다!

    안녕:)

    반응형

    댓글

Designed by Tistory.