[Swift 프로그래밍] 빠른 종료 (Early Exit)

이정훈·2022년 6월 18일
0

Swift 기본

목록 보기
15/22
post-thumbnail

본 내용은 스위프트 프로그래밍 3판 (야곰 지음) 교재를 공부한 내용을 바탕으로 작성 하였습니다.

빠른 종료와 guard

빠른 종료는 특정 조건에 따라 상위의 코드 블럭을 탈출하게 한다.
빠른 종료의 키워드는 guard이며, 마치 for문의 if문과 같은 역할을 하고 if문과 마찬가지로 guard문 뒤에는 Bool 타입의 값이 와서 true일 경우 실행문이 계속 진행되고, false의 경우 else문이 실행된다.
특정 조건에 부합하지 않는 경우 else문이 실행되고, 따라서 else문에는 반드시 상위 코드 블럭을 종료하는 키워드인 return, continue, break 등을 구현해야 하며 이와 같은 키워드를 사용 할 수 있는 함수, while문, for문 등에서 guard문을 사용 할 수 있다.

다음은 guard문의 형태를 구체화 한 것이다.

guard Bool 타입 값 else {
	예외사항 실행문
    제어문 전환 명령어
}

다음은 guard문을 활용하여 1부터 10까지의 수 중 짝수에 해당하는 수 만을 출력하는 코드이다.

for i in 1...10 {
    guard i % 2 == 0 else {     //guard 조건에 맞지 않으면 else문 실행
        continue
    }
    print(i)
}

if문에 비해 guard문으로 좀 더 간단하고 가독성 좋게 구현 할 수 있다.

옵셔널 바인딩을 사용한 guard문

guard문 뒤에는옵셔널 바인딩으로 Bool 값을 확인 할 수 있다. 또한 옵셔널 바인딩에서 값이 존재 할 경우 상수를 지역 상수 처럼 내부에서 사용이 가능하다.

다음은 옵셔널 바인딩을 사용한 간단한 예시이다.

func introduce(_ person: [String: String]) -> Void {
    guard let name: String = person["name"] else {
        return
    }
    
    print("저의 이름은 \(name) 입니다.")
    
    guard let residence: String = person["residence"] else {
        return
    }
    
    print("저는 \(residence)에 거주중 입니다.")
    
    guard let job: String = person["job"] else {
        return
    }
    
    print("저의 직업은 \(job) 입니다.")
}

var person: [String: String] = [String: String]()   //새로운 딕셔너리 생성
person["name"] = "이철수"      //딕셔너리에 새로운 Key: Value 추가
person["residence"] = "대한민국"
person["job"] = "개발자"

introduce(person)

위의 코드와 같이 옵셔널 바인딩 된 상수 name, residence, job을 지역 상수처럼 사용하고 있는 것을 확인 할 수 있다.

만약 guard문 뒤에 조건을 더 추가 하고 싶다면 guard문 뒤에 , 후 조건을 이어서 구현해주면 된다. 이때 ,&&와 같은 역할을 하며 &&로도 사용이 가능하다.

func introduce2(name: String?, age: Int?, job: String?) {
    guard let name: String = name, let age: Int = age, age > 19, let job: String = job else {
        print("성인이 아닙니다.")  //age가 19 이하일 경우 else문 실행
        return
    }
    print("저의 이름은 \(name)입니다.")
    print("저는 성인입니다.")
    print("저의 직업은 \(job)입니다.")
}

introduce2(name: "이철수", age: 99, job: "개발자")
profile
새롭게 알게된 것을 기록하는 공간

0개의 댓글