기어가더라도 제대로

[5일차] 조건문 패밀리(if, switch ...) 본문

Swift - 기초

[5일차] 조건문 패밀리(if, switch ...)

Damagucci-juice 2022. 9. 28. 14:30

조건을 걸고 그 조건을 만족하는지 확인해야하는 경우가 많습니다. 

보통 이런식으로 쓰게됩니다. 

if someCondition {
    print("Do something")
}
  1. if 키워드를 사용하면 Swift 에게 조건을 판단해달라고 신호를 보냅니다. 
  2. someCondition이 참인지 거짓인지 확인합니다.
  3. 참이라면 { } 안에 명령을 실행합니다. 

{ } 는 culry brackets 라고 하는데 열고 닫습니다. 그 안에를 블록이라 표현합니다. 

someCondition 안에서 비교 연산을 해도 되고 그렇습니다. <, >, <=, >=, ==, !=  등등이요. 혹은 Bool 타입이면 !만 써도 되겠네요.

if 를 여러개 쓰는 방법은

if someCondition {
//
} else if otherCondition {
//
} else {
//
}

이런식으로 사용할 수 있겠습니다. 또한 두 조건을 동시에 만족하고, 혹은 하거나 를 하고 싶다면 어떻게 할까요? 

if someCondition && otherCondition {

}

if someCondition || otherCondition {

}

위의 조건문은 두 조건이 모두 참이여야 하고, 아래 조건은 둘 중 하나라도 참이면 되는 경우입니다. 

데이터들을 어떻게 비교될까?

Swift 는 다양한 데이터 타입을 지원하고 이들을 같은지 다른지 혹은 비교하는 방법을 마련해 보았습니다.

let firstName = "Paul"
let secondName = "Sophie"

let firstAge = 40
let secondAge = 10

print(firstName == secondName)
print(firstName != secondName)
print(firstName < secondName)
print(firstName >= secondName)

print(firstAge == secondAge)
print(firstAge != secondAge)
print(firstAge < secondAge)
print(firstAge >= secondAge)

뭐 글자 크기 비교는 규칙은 모르겠지만, 알파벳이 먼저 오느냐 순서로 대소 구분을 하나봅니다. 

비슷하게 Date 타입에서도 대소 구분이 가능합니다. 

enum 에서도 가능한데 이것은 어떻게 해줄까요? 

enum Sizes: Comparable {
    case small
    case medium
    case large
}

let first = Sizes.small
let second = Sizes.large
print(first < second)

enum 타입 안에서 먼저오는 case 의 경우에 더 작다고 표시를 합니다. (case 가 small 이여서 그런게 아닙니다.)

언제 If 보다 Switch 를 사용해야 할 까요? 

명확한 기준은 없지만 아래 3개의 조건에 해당하면 if 보단 Switch 를 사용하는 것이 좋습니다. 

  1. switch 문 같은 경우는 enum 의 모든 케이스를 확인하는 것 처럼 완벽해야합니다.
    1. if, 나 if else 는 넣어도 그만 안넣어도 그만이기 때문에 놓치는 경우가 있을 수 있습니다. 
  2. 호출 횟수에 차이가 있습니다.
    1. if 가 함수내에 3번 호출이 되고 그 함수가 3번 호출된다면 ?
      1. 모든 if 를 확인해보니까 총 9번이 확인하는 비용이 듭니다.
    2. switch 에서 case가 3개 있고 그 함수가 3번 호출된다면? 
      1. case가 해당되는 것이 있는가 없는가 만 확인하니까 총 3번이 확인하는 비용이 듭니다. 
  3. Switch 문은 if 문으로 다루기 힘든 고급 패턴 매칭을 제공합니다. 
    1. pattern matching 은 쉽게 말하면 A data 가  B 타입으로 변환할 수 있는지를 확인 하는 것입니다. 
    2. 더 궁금하면 검색해보세요 ~

fallthrough 키워드는 다루지 않았는데, 다른 언어에서는 중요하게 쓰일지 몰라도 swift 에서는 중요성이 많이 떨어집니다. 몰라도 됩니다. 

3항 조건 연산자는 언제 쓸까요? 

if, else 를 한줄에 쓰는 것과 같은 효과를 냅니다. 

 

Comments