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 |
Tags
- 애니메이션
- Observable
- Clean Code
- Protocol
- collectionview
- swiftUI
- 리펙터링
- 리펙토링
- RxCocoa
- combine
- Xcode
- 리팩토링
- ios
- Refactoring
- tableView
- UITextView
- ribs
- Human interface guide
- 클린 코드
- SWIFT
- MVVM
- map
- 스위프트
- UICollectionView
- uiscrollview
- uitableview
- clean architecture
- HIG
- rxswift
- swift documentation
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[Refactoring] 9-6 조건부 로직 최소화 (Assertion 추가하기) 본문
Assertion 추가하기
- 특정 조건이 참일 때만 동작하도록 하는 코드 영역이 있는데, 이러한 기능을 development 타겟에만 적용시켜서, 사전에 개발할 때 실수를 방지하도록 하는 기능
- 이러한 가정이 코드에 항상 명시적으로 기술되어 있지 않거나 이런 명시적인 것을 못보고 개발을 할 때 실수를 막기 위하여 assertion을 넣는 것
- assertion 추가 시 주의사항
- assertion 실패는 시스템의 다른 부분에 영향을 주지 않아야함
- development 타겟에만 적용시켜 운영에서는 영향을 주지 않도록 해야함
- assertion은 개발자가 실수를 할만한 곳이나 버그를 잡은 후에도 assertion을 넣으면 다른 개발자가 실수할 확률을 줄어주기 때문에 좋은 코드
Assertion 리펙토링하기
- swift에서는 다양한 Assertion이 있는데, 대표적인 assert()만 알아도 무방
- swift에서의 Assertion 내용은 이전 포스팅 글 참고 (Optimization Level 개념과 assert, assertFailure, precondition, preconditionFailure, fatalError 사용 방법)
- assert(condition, message)는 안에 들어갈 값이 true여야하며, false인 경우 message를 출력하며 크래시가 발생함
- 단, assert(condition, message)는 debug모드에서만 동작
ex) 손님이 있고, 이 손님의 계산을 도와주는 applyDiscount(number:) 메소드가 존재
struct Customer {
var discountRate = 0.8
var discounted = false
func applyDiscount(number: Double) -> Double {
discounted ? number * discountRate : number
}
}
- 만약 위 코드를 포함한 프로그램이 몇만줄인데 API 요청한 discount 값을 보니 음수로 찍힌 상태 -> 에러가 난 곳을 찾기가 힘듦
- assertion을 사용하면 어디서 에러가 났는지 쉽게 파악이 사전에 가능
struct Customer {
var discountRate = 0.8
var discounted = false
func applyDiscount(number: Double) -> Double {
assert(0 < number && 0 < discountRate, "number와 discountRate는 양수여야합니다.")
return discounted ? number * discountRate : number
}
}
* 참고
- Refactoring (Martin Flowler)
'Refactoring (리펙토링)' 카테고리의 다른 글
[Refactoring] 10-2 API 리펙토링 (객체 통째로 넘기기) (0) | 2023.06.21 |
---|---|
[Refactoring] 10-1 API 리펙토링 (질의 함수와 변경 함수 분리하기) (0) | 2023.06.06 |
[Refactoring] 9-5 조건부 로직 최소화 (조건부 로직을 protocol로 리펙토링하기) (0) | 2023.06.04 |
[Refactoring] 9-4 조건부 로직 최소화 (조건부 로직을 다형성으로 바꾸기) (0) | 2023.06.03 |
[Refactoring] 9-3 조건부 로직 최소화 (중첩 조건문을 보호 구문으로 바꾸기, swift에서 guard문의 의미) (0) | 2023.06.02 |
Comments