Swift if문, switch문

미니·2022년 4월 25일
0

Swift 문법

목록 보기
4/6
post-thumbnail

프로그래밍에서 흐름을 제어가는 것은 중요한 부분이다.
어떤 상황에 따라서 코드를 실행하고, 안하고는 프로그래밍에서 종종 발생하는 상황이다. 이럴때 사용할 수 있는 것은 조건문과 반복문이다.

스위프트에는 조건문에는 3가지가 존재한다. if, switch, guard 문이 존재한다. 이를 하나하나 정리해보려고 한다.

if문

if문은 대표적인 조건문으로, 다른 프로그래밍 언어와 동일하게 if,else if,else가 존재한다.
스위프트에서는 조건에 대한 소괄호는 선택사항이다. 다른 프로그래밍 언어와 동일하게 else if 문의 개수는 상관이 없으며, else문은 존재하지 않아도 괜찮다.

let first:Int = 5
let second:Int = 7

if first > second{
    print("First is bigger than Second")
} else if first < second{
    print("Second is bigger than First")
} else{
    print("First is equal to Second")
}

//print: Second is bigger than First

switch 문

switch 구문은 다른 프로그래밍 언어들의 문법과 다른 문법을 가지고 있다. break문의 사용이 필수적인 언어들이 많지만, 스위프트는 break문의 사용이 선택적이다. 그렇기 때문에 case 내부의 코드를 모두 실행하면 switch 구문이 종료된다는 뜻이다.
스위프트에서는 구문을 연속 실행하기 위해서는 fallthrough구문을 통해서 가능하다.

1. 숫자형

let integerValue:Int = 5

switch integerValue{
case 0:
    print("Value == zero")
case 1...10:
    print("Value == 1...10")
    fallthrough
case Int.min..<0,101..<Int.max:
    print("Value < 0 or Value > 100")
default:
    print("10 < Value <= 10")
}

/*
print:
	Value == 1...10
	Value < 0 or Value > 100
*/

위의 예시에서 'Value < 0 or Value > 100'가 출력된 이유는 fallthrough 구문을 통해사 다음 case에 대해서 실행하도록 지정했기 때문이다.

switch 구문의 입력 값으로 숫자 표현 뿐만 아니라 문자, 문자열, 튜플, 범위, 패턴 등이 가능하다. 다음은 문자열을 활용한 예시이다.

2. 문자열

let stringValue:String = "Liam Neeson"
switch stringValue{
case "min":
    print("He is Min")
case "Jay":
    print("He is Jay")
case "Jenny","Joker","Nova":
    print("He or She is \(stringValue)")
default:
    print("\(stringValue) said 'I don't know who you are.'")
}

//print: "Liam Neeson said 'I don't know who you are.'"

3. 튜플

위에서 튜플도 적용이 가능하다고 언급했다. 다음은 튜플의 적용 예시이다.

typealias NameAge = (name:String,age:Int)

let tupleValue:NameAge = ("min",99)

switch tupleValue{
case ("min",99):
    print("맞았습니다.")
default:
    print("누굴 찾나요?")
}

//print : "맞았습니다."

위의 예시에서 튜플을 switch문으로 제어했을 때의 문제점이 있다. 모든 값이 정확하게 맞아야만 구문이 실행된다는 것이다. 이를 해결하기 위해서 와일드 카드 식별자를 활용할 수 있다. 또한 값 바인딩을 통해서 와일드 카드의 값을 받아올 수 있다.

let tupleValue2:NameAge = ("min",20)
switch tupleValue2{
case ("min",99):
    print("정확합니다.")
case ("min",_):
    print("이름만 맞았습니다.")
case (_,99):
    print("나이만 맞았습니다.")
default:
    print("누굴 찾나요?")
}

//print: "이름만 맞았습니다."

switch tupleValue2{
case ("min",99):
    print("정확합니다.")
case ("min",let age):
    print("이름만 맞았습니다. 나이는 \(age) 입니다.")
case (let name,99):
    print("나이만 맞았습니다. 이름은 \(name) 입니다.")
default:
    print("누굴 찾나요?")
}

//print : "이름만 맞았습니다. 나이는 20 입니다."

4. 열거형

위의 예시들은 모두 한정된 값을 사용하지 않았습니다. 하지만 enum과 같은 한정된 값을 사용하였을때, switch구문을 더욱 잘 활용할 수 있습니다. 또한, default 구문을 설정하지 않아도 됩니다.

enum School{
    case primary,elemetary,middle,high,college,university,graduate
}

let 최종학력:School = .university

switch 최종학력{
case .primary:
    print("유치원")
case .elemetary:
    print("초등학교")
case .middle:
    print("중학교")
case .high:
    print("고등학교")
case .college,.university:
    print("대학교")
case .graduate:
    print("박사")
}

//print : 대학교

만약 위의 예시 열거형에서 case가 추가될 가능성이 있다면, 어떻게 대비해야 할까요?
와일드카드를 통해서 추가적으로 생성된 값이 있다는 것을 알릴 수 있겠죠. 하지만, 이는 문법적 요류가 없기 때문에 미래의 누군가가 알아채지 못할 수도 있습니다. 이럴때는 unknown 키워드를 통해서 대처가 가능합니다. unkown 속성을 부여하게 되면 컴파일러가 경고를 발생시키기 때문입니다.

enum Menu{
    case chicken
    case pizza
    case hambuger
}

let launch:Menu = .chicken

switch launch{
case .chicken:
    print("반반 무 많이")
case .pizza:
    print("핫소스 많이")
@unknown case _:
    print("오늘 메뉴가 뭐죠?")
}

참고 : 스위프트 프로그래밍 (저자 - 야곰)

profile
IOS 개발자 지망생

0개의 댓글