Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 리펙토링
- clean architecture
- 애니메이션
- 스위프트
- Refactoring
- 리팩토링
- map
- Clean Code
- Protocol
- Xcode
- UITextView
- rxswift
- RxCocoa
- ios
- 클린 코드
- collectionview
- SWIFT
- Human interface guide
- combine
- swift documentation
- HIG
- uitableview
- MVVM
- swiftUI
- uiscrollview
- UICollectionView
- ribs
- 리펙터링
- Observable
- tableView
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] guard문 잘 사용하기 (#guard문 사용 시 주의사항, #이중부정, #2중부정) 본문
Refactoring (리펙토링)
[iOS - swift] guard문 잘 사용하기 (#guard문 사용 시 주의사항, #이중부정, #2중부정)
jake-kim 2023. 10. 31. 01:08guard문을 사용하여 과도한 들여쓰기 막기
- guard문은 다른 언어에 거의 없고 swift언어에만 있는 문법
- guard문의 의미는 코드의 흐름에서 막아야 하는 조건이라는 의미
- guard를 사용하면 과도한 들여쓰기를 막고 읽기 쉽게 표현이 가능
ex)
- guard문 쓰기 전
func processUserInput(_ input: String?) {
if let unwrappedInput = input {
if unwrappedInput.count > 0 {
if let intValue = Int(unwrappedInput) {
if intValue >= 0 {
print("입력한 값 > 양수")
} else {
print("입력한 값 > 음수")
}
} else {
print("입력한 값 > 정수 x")
}
} else {
print("입력한 값 > empty")
}
} else {
print("입력한 값 > nil")
}
}
- guard문을 사용하여 과도한 들여쓰기 제한
func processUserInput2(_ input: String?) {
guard let unwrappedInput = input, !unwrappedInput.isEmpty else {
print("입력한 값 > empty or nil")
return
}
guard let intValue = Int(unwrappedInput) else {
print("입력한 값 > 정수 x")
return
}
if intValue >= 0 {
print("입력한 값 > 양수")
} else {
print("입력한 값 > 음수")
}
}
- guard문을 사용하면 위처럼 과도한 들여쓰기를 막고, if문이 아니라 guard라는 키워드이므로 '코드의 진행을 막아야 한다'는 명확한 의미 전달이 쉬운 장점이 존재
guard문 사용 시 주의사항
- '코드의 진행을 막아야 한다'라는 의미로 guard문을 사용하다보면 if문을 사용하지 않는 케이스가 있는데, 이중부정을 하게된다면 guard문이 아닌 if문을 사용할 것
- *이중부정: 부정을 두 번 수행한 코드를 의미
- guard문을 사용하면 조건식이 false인 경우, 코드의 진행사항을 막는데 이 조건식에 부정을하면 개발자는 이 코드를 읽으면서 2번 생각해야하는 안좋은 코드가 됨
// guard문 블럭 return 부분은 value값이 비어있는것의 부정의 부정 (== value.isEmtpy)이 되어야 실행
// 이중부정으로 인해 읽기 어려운 코드
guard !value.isEmpty else {
return
}
- 이럴땐 if문 사용할 것
if value.isEmpty {
return
}
'Refactoring (리펙토링)' 카테고리의 다른 글
[iOS - swift] 표현식을 이용한 조건문, 삼항 연산자, switch - enum 리펙터링 (Swift5.9) (3) | 2023.11.10 |
---|---|
[iOS - swift] 2. weak self 동작 이해하기 - 외부에 weak self 선언하고 클로저에서 사용하는 경우 (#캡처리스트 [weak self] 리펙토링) (0) | 2023.11.05 |
[iOS - swift] 복잡한 조건문 리펙토링 (if, else, else if, guard 문) (2) | 2023.10.27 |
[Refactoring] 11-4 상속 리펙토링 (Wrapper 만들기) (0) | 2023.07.28 |
[Refactoring] 11-3 상속 리펙토링 (서브 클래스를 델리게이트로 바꾸기) (0) | 2023.07.27 |
Comments