Swift

[swift] 제어 전송문 정리 | fallthrough continue break return throw

하이D:) 2023. 11. 26. 21:32

swift 기본 문법에 등장하는 개념인 제어 전송문에 대해 한번쯤 정리할 필요가 있을 것 같아 써보는 글이다.

 

일단 fallthrough, continue, break, return, throw에 대한 걸 구체적으로 알기 전에 어디에서 사용되는 제어 전송문 키워드인지 살펴보자면, fallthrough는 switch문에서 사용하고 continue는 반복문에서, break는 switch문과 반복문 두 곳에서 모두, return은 함수, throw는 에러 발생 가능 함수에서 사용된다.

 

 

# fallthrough

fallthrough는 switch 문에서 사용하고 해당 case에 매칭됐다고 하더라도 (한 단계)다음 case로 내려가서 문장을 실행시킨다.

switch a {
case 1,2:
    print(a)
case 3:
    print("3입니다.")
    fallthrough
case 4:
    print("4입니다.")
case 5:
    print("5입니다.")
default:
    break
}


// 3입니다.
// 4입니다.

 

 

만약 연속하는 케이스에 fallthrough가 있다면 어떻게될까?

//연속하는 케이스에 fallthrough가 있다면?
switch a {     
case 1,2:
    print(a)
case 3:
    print("3입니다.")
    fallthrough
case 4:
    print("4입니다.")
    fallthrough
case 5:
    print("5입니다.")
default:
    break
}

// 3입니다.
// 4입니다.
// 5입니다.

 

 

# continue

continue는 반복문 즉, for문이라 while문에서 사용되며, 현재 사이클을 중지하고 다음 사이클로 넘어가도록 하는 역할을 한다.

for index in 1...10 {

    print("before if", index)
    
    if index % 2 != 0 {
        continue //짝수가 아니면 continue(다음 사이클로 넘어간다)
    }

    print("after if", index) //짝수일 때에만 실행된다
}

 

 

# break

break는 switch문과 반복문(for문, while문) 두 곳에서 모두 사용되며, 전체 제어문의 실행을 즉각 중지하는 역할을 한다.

 

switch문에서 사용되는 break

switch문에서 default case에서 사용되는 것을 많이 봤을 것이다. 하지만 default 케이스가 아니더라도 실행하는 문장이 없을 때는 반드시 입력해야 한다.

var a = 1

switch a {
case 1:
    break
case 2:
    print(a)
case 3:
    print("3입니다.")
default:
    break
}

 

반복문에서 사용되는 break

loop의 실행을 중지한다.

var a = 3

for index in 1...10 {
    
    print("before if", index)
    
    if index == 3 {
        break
    }

    print("after if", index)
}
//before if 1
//after if 1
//before if 2
//after if 2
//before if 3

 

# return

함수에서 매우 익숙하게 볼 수 있는 이것도 제어 전송문이다. 함수의 실행을 중단하고 함수를 벗어난다는 의미이고 리턴타입이 있다면 해당하는 타입을 리턴하면서 함수를 벗어나고 리턴타입이 없는 경우 함수의 실행을 중지하고 벗어난다.

 

# throw

throw는 에러 발생 가능 함수를 작성할 때 볼 수 있으며, throw 키워드 다음에 정의된 에러의 타입을 리턴하도록 정의한다.

enum HeightError: Error {    //에러 프로토콜 채택
    case maxHeight
    case minHeight
}

func checkingHeight(height: Int) throws -> Bool {    // (에러를 던잘수 있는 함수 타입이다)
    
    if height > 190 {
        throw HeightError.maxHeight
    }
}

 

정의한 함수를 호출할 때에는 do-catch 문으로 에러가 발생하는 상황을 처리할 수 있다.

do {
    let isChecked = try checkingHeight(height: 200)
    print("놀이기구 타는 것 가능: \(isChecked)")
    
} catch {
    
    print("놀이기구 타는 것 불가능", error)
    
}