assert와 guard
애플리케이션이 동작 중에 생성하는 다양한 결과값을 동적으로 확인하고, 빠르고 안전하게 처리할 수 있도록 해준다.
/* Assertion */
var someInt: Int = 0
assert(someInt == 0, "someInt != 0") // 조건이 맞기 때문에 지나침
someInt = 1
//assert(someInt == 0) // 동작 중지, 검증 실패
//assert(someInt == 0, "someInt != 0") // 메세지 지정한 경우
func functionWithAssert(age: Int?) {
assert(age != nil, "age == nil")
assert((age! >= 0) && (age! <= 130), "나이값 입력이 잘못되었습니다.")
print("당신의 나이는 \(age!)세입니다.")
}
functionWithAssert(age: 50)
//functionWithAssert(age: -1) // 동작 중지
//functionWithAssert(age: nil) // 동작 중지
/* guard - Early Exit */
func functionWithGuard(age: Int?) {
guard let unwrappedAge = age, // 옵셔널 바인딩
unwrappedAge < 130,
unwrappedAge >= 0 else { // 기술한 조건과 맞지 않으면 else문 수행
print("나이값 입력이 잘못되었습니다.")
return
}
guard unwrappedAge < 100 else {
return
}
print("당신의 나이는 \(unwrappedAge)세입니다.") // guard를 통과하게 되면 언래핑한 변수 사용 가능
}
// 반복문에서 guard 활용
var count = 1
while true {
guard count < 3 else {
break
}
print(count)
count += 1
}
// 1
// 2
// 딕셔너리에서 guard 활용
func someFunction(info: [String: Any]) {
// "name" 키의 값(Any)타입을 String 타입으로 캐스팅 해보며 검증
guard let name = info["name"] as? String else {
print("name이 정상적으로 입력되지 않음!!")
return
}
// "age" 키의 값(Any)타입을 Int 타입으로 캐스팅 해보고, 값도 확인하며 검증
guard let age = info["age"] as? Int, age >= 0 else {
print("age가 정상적으로 입력되지 않음!!")
return
}
print("\(name): \(age)") // 모두 정상적으로 통과하면 출력
}
someFunction(info: ["name": "jenny", "age": "10"]) // 종료
someFunction(info: ["name": "mike"]) // 종료
someFunction(info: ["name": "kybeen", "age": 10]) // kybeen: 10
[ assert ]
assert(_:_:file:line:) 함수를 사용하며 디버깅 모드에서만 동작한다.
주로 디버깅 중 조건의 검증을 위해 사용
assert() 함수 매개변수의 조건을 확인한 뒤, 조건이 맞으면 그냥 지나치고, 조건이 맞지 않으면 설정한 메세지를 출력하며 실행을 중지시킨다.


- 활용 코드

[ guard - Early Exit ]
guard를 사용하면 잘못된 값의 전달 시에 특정 실행구문을 빠르게 종료해줄 수 있다.
디버깅 모드 뿐만 아니라 어떤 조건에서도 동작하며, guard의 else 블럭 내부에는 특정 코드블럭을 종료하는 지시어(return, break 등)가 꼭 있어야 한다.
타입캐스팅, 옵셔널과도 자주 사용되며 그 외 단순 조건 판단 후에 빠르게 종료하고 싶을 때도 활용할 수 있다.

아래 예시처럼 반복문과 딕셔너리 등에서도 활용이 가능하다.


'Swift' 카테고리의 다른 글
[ Swift ] Swift 기초 문법15 - 익스텐션 (0) | 2023.02.19 |
---|---|
[ Swift ] Swift 기초 문법14 - 프로토콜 (0) | 2023.02.19 |
[ Swift ] Swift 기초 문법12 - 타입캐스팅 (0) | 2023.02.19 |
[ Swift ] Swift 기초 문법11 - 옵셔널 체이닝과 nil 병합 연산자 (0) | 2023.02.19 |
[ Swift ] Swift 기초 문법10 - 인스턴스의 생성과 소멸 (0) | 2023.02.19 |
assert와 guard
애플리케이션이 동작 중에 생성하는 다양한 결과값을 동적으로 확인하고, 빠르고 안전하게 처리할 수 있도록 해준다.
/* Assertion */
var someInt: Int = 0
assert(someInt == 0, "someInt != 0") // 조건이 맞기 때문에 지나침
someInt = 1
//assert(someInt == 0) // 동작 중지, 검증 실패
//assert(someInt == 0, "someInt != 0") // 메세지 지정한 경우
func functionWithAssert(age: Int?) {
assert(age != nil, "age == nil")
assert((age! >= 0) && (age! <= 130), "나이값 입력이 잘못되었습니다.")
print("당신의 나이는 \(age!)세입니다.")
}
functionWithAssert(age: 50)
//functionWithAssert(age: -1) // 동작 중지
//functionWithAssert(age: nil) // 동작 중지
/* guard - Early Exit */
func functionWithGuard(age: Int?) {
guard let unwrappedAge = age, // 옵셔널 바인딩
unwrappedAge < 130,
unwrappedAge >= 0 else { // 기술한 조건과 맞지 않으면 else문 수행
print("나이값 입력이 잘못되었습니다.")
return
}
guard unwrappedAge < 100 else {
return
}
print("당신의 나이는 \(unwrappedAge)세입니다.") // guard를 통과하게 되면 언래핑한 변수 사용 가능
}
// 반복문에서 guard 활용
var count = 1
while true {
guard count < 3 else {
break
}
print(count)
count += 1
}
// 1
// 2
// 딕셔너리에서 guard 활용
func someFunction(info: [String: Any]) {
// "name" 키의 값(Any)타입을 String 타입으로 캐스팅 해보며 검증
guard let name = info["name"] as? String else {
print("name이 정상적으로 입력되지 않음!!")
return
}
// "age" 키의 값(Any)타입을 Int 타입으로 캐스팅 해보고, 값도 확인하며 검증
guard let age = info["age"] as? Int, age >= 0 else {
print("age가 정상적으로 입력되지 않음!!")
return
}
print("\(name): \(age)") // 모두 정상적으로 통과하면 출력
}
someFunction(info: ["name": "jenny", "age": "10"]) // 종료
someFunction(info: ["name": "mike"]) // 종료
someFunction(info: ["name": "kybeen", "age": 10]) // kybeen: 10
[ assert ]
assert(_:_:file:line:) 함수를 사용하며 디버깅 모드에서만 동작한다.
주로 디버깅 중 조건의 검증을 위해 사용
assert() 함수 매개변수의 조건을 확인한 뒤, 조건이 맞으면 그냥 지나치고, 조건이 맞지 않으면 설정한 메세지를 출력하며 실행을 중지시킨다.


- 활용 코드

[ guard - Early Exit ]
guard를 사용하면 잘못된 값의 전달 시에 특정 실행구문을 빠르게 종료해줄 수 있다.
디버깅 모드 뿐만 아니라 어떤 조건에서도 동작하며, guard의 else 블럭 내부에는 특정 코드블럭을 종료하는 지시어(return, break 등)가 꼭 있어야 한다.
타입캐스팅, 옵셔널과도 자주 사용되며 그 외 단순 조건 판단 후에 빠르게 종료하고 싶을 때도 활용할 수 있다.

아래 예시처럼 반복문과 딕셔너리 등에서도 활용이 가능하다.


'Swift' 카테고리의 다른 글
[ Swift ] Swift 기초 문법15 - 익스텐션 (0) | 2023.02.19 |
---|---|
[ Swift ] Swift 기초 문법14 - 프로토콜 (0) | 2023.02.19 |
[ Swift ] Swift 기초 문법12 - 타입캐스팅 (0) | 2023.02.19 |
[ Swift ] Swift 기초 문법11 - 옵셔널 체이닝과 nil 병합 연산자 (0) | 2023.02.19 |
[ Swift ] Swift 기초 문법10 - 인스턴스의 생성과 소멸 (0) | 2023.02.19 |