-
Early ExitSwift 2021. 4. 13. 10:55
안녕하세요. 그린입니다🟢
저번 포스팅인 옵셔널 체이닝에 이어 관련된 Early Exit, 빠른종료에 대해 학습해보겠습니다🧑🏻💻
옵셔널 체이닝과 옵셔널 바인딩은 이해가 된 상태에서 빠른 종료의 키워드인 guard에 대해 알아보고
if와는 어떤 옵셔널 바인딩에서 차이가 있을지에 대해 배워보겠습니다🙌
Early Exit
: 빠른종료로 if문에서는 else 구문이 없어도 되며 만약 else 구문이 있을때는 if와 else 구문 모두 구현을 해주며 분기를 해줍니다.
그러나 guard 구문은 꼭 else 구문이 있어야 됩니다. else 구문에서는 무조건 상위의 코드블럭을 종료시키는 제어문 전환 명령 혹은 그 구문을 탈출시킬 수 있는 비반환 함수 / 메서드 호출이 있어야 합니다.제어문 전환 명령어
: return, break, continue, throw
Early Exit 장점
: 만약 예외사항만 처리하려고 한다면 if보다는 guard 구문을 사용하는것이 코드의 간결성을 높여줍니다.
: guard 구문을 통해 옵셔널 바인딩도 해줄 수 있습니다.guard 구문을 통한 옵셔널 바인딩 사용
func description(_ product: [String: String]) { guard let color: String = product["color"] else { return } print("This color is \(color)") guard let size: String = product["size"] else { print("This size is none") return } print("This size is \(size)") } var product: [String: String] = [String: String]() product["color"] = "Green"
: size가 없어도 옵셔널 바인딩이 되어 아래와 같은 출력을 나타냄
This color is Green This size is none
: 만약 여기서 사이즈 추가로 부여해준다면 다시 두 출력문이 정상적으로 데이터 값이 들어가서 나타나게됨
product["size"] = "Big" //This color is Green //This size is Big
여러 조건 추가로 guard 구문의 사용
var product: [String: String] = [String: String]() product["color"] = "Green" product["size"] = "Big" func info(color: String?, size: String?) { guard let color: String = color, let size: String = size else { print("It's not collect") return } print("This product's color is \(color) & size is \(size)") } info(color: product["color"], size: nil) //It's not collect
: 이렇게 guard let 옵셔널 바인딩 조건에 여러 조건을 한번에 나열하고 싶으면 콤마(,)로 나타내줍니다.
: 해당 조건은 불리언 타입이며 AND(&&)와 같은 동작을 해줍니다.info(color: product["color"], size: ["size"]) //This product's color is Green & size is Big
guard 구문 사용이 되지 않는 상황
: 함수/메서드 등 코드 블록 내부에서만 사용이 가능함으로 코드 블록 밖에 있다면 코드 블록을 탈출하는 제어문 전환 명령을 사용할 수 없음으로 이 경우에는 사용할 수 없습니다.
[회고]
이렇게 이전 포스팅인 옵셔널 체이닝에 이어 빠른 종료에 대해서도 학습해보았습니다. 옵셔널 바인딩/체이닝 그리고 빠른 종료까지 왜 if문과 guard문이 따로 있는것인지 어느 상황에서 어느 구문을 사용할지 이제 감이 오는것 같습니다. 중요한 포인트는 어느 구문이 더 낫다 장점이 있는것이 아닌 각 구문마다 적절한 상황이 있다는것!!😃 빠르게 예외사항을 처리해주고 싶다면 guard 구문을 사용하는것이 이번 빠른 종료에서 배운점이였습니다✍️
[참고자료]
스위프트 프로그래밍 3판 (야곰 지음)
'Swift' 카테고리의 다른 글
Closure 심화 (0) 2021.04.27 소켓통신 (0) 2021.04.19 Optional Chaining (0) 2021.04.12 GCD & Operation (0) 2021.04.09 lazy var (0) 2021.03.17