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
- uitableview
- Refactoring
- 스위프트
- MVVM
- collectionview
- map
- tableView
- 리팩토링
- rxswift
- UITextView
- 클린 코드
- Clean Code
- ios
- Protocol
- HIG
- 리펙터링
- Observable
- combine
- swiftUI
- Human interface guide
- uiscrollview
- 애니메이션
- RxCocoa
- swift documentation
- SWIFT
- Xcode
- clean architecture
- 리펙토링
- ribs
- UICollectionView
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[Refactoring] 9-1. 조건부 로직 최소화 (조건문 분해하기) 본문
조건문 분해하기
- 조건문에서 중요한 것
- 조건문에서 무슨 일이 일어나는지 이야기해주지만 '왜'가 들어나는 코드가 필요
- 조건문들을 함수로 만들어서 조건의 의도가 분명하게 들어나도록 수정이 필요
// '어떻게'만 나타난 조건문 - 조건문이 길어지게되면, 조거문 안에 블록문에서 일어나는 이유를 파악하기가 힘듦
if 20 < jake.age && jake.plan.summerStart < jake.plan.reservationDate {
charge = basePrice * 2
} else {
charge = basePrice
}
// '왜'의 의미가 있는 있는 조건문 - 조건문을 추상화하여, 조건문 안에 charge = basePrice * 2의 이유를 파악하기 쉬움
if adult() && summer() {
charge = basePrice * 2
} else {
charge = basePrice
}
- 조건문을 하나하나 파악하고 나서야 드디어 이 조건문들이 무엇을 말하는지 알게 되는 경우가 있는데, 이때도 이 조건문들을 하나의 함수로 빼내면 의도가 명확하게 들어날 수 있음
let isUserLoggedIn = true
let hasSubscription = false
let isAdmin = false
let isTrialPeriodExpired = true
if isUserLoggedIn {
if hasSubscription {
if isAdmin {
print("관리자로 로그인되었습니다.")
} else {
if isTrialPeriodExpired {
print("로그인되었습니다. 구독이 만료되었습니다.")
} else {
print("로그인되었습니다. 구독이 활성화되었습니다.")
}
}
} else {
print("로그인되었습니다. 구독을 시작해주세요.")
}
} else {
print("로그인이 필요합니다.")
}
- 리펙토링 - 하나의 함수로 빼내어 복잡한 분기문들의 의도를 명확히 할 수 있음
func checkSubscribing(isUserLoggedIn: Bool, hasSubscription: Bool, isAdmin: Bool, isTrialPeriodExpired: Bool) {
if isUserLoggedIn {
if hasSubscription {
if isAdmin {
print("관리자로 로그인되었습니다.")
} else {
if isTrialPeriodExpired {
print("로그인되었습니다. 구독이 만료되었습니다.")
} else {
print("로그인되었습니다. 구독이 활성화되었습니다.")
}
}
} else {
print("로그인되었습니다. 구독을 시작해주세요.")
}
} else {
print("로그인이 필요합니다.")
}
}
checkSubscribing(isUserLoggedIn: true, hasSubscription: true, isAdmin: false, isTrialPeriodExpired: true)
* 전체 코드: https://github.com/JK0369/ExRefactoring9_1
* 참고
- Refactoring (Martin Flowler)
'Refactoring (리펙토링)' 카테고리의 다른 글
[Refactoring] 9-3 조건부 로직 최소화 (중첩 조건문을 보호 구문으로 바꾸기, swift에서 guard문의 의미) (0) | 2023.06.02 |
---|---|
[Refactoring] 9-2. 조건부 로직 최소화 (조건문 통합하기) (0) | 2023.05.29 |
[Refactoring] 8-5 데이터 조작화 (값을 참조로 바꾸기) (0) | 2023.05.22 |
[iOS - swift] Protocol 지향 프로그래밍 (상속보다 프로토콜을 사용하는게 좋은 이유, 인터페이스, DIP, SRP) (0) | 2023.05.21 |
[Refactoring] 8-4 데이터 조작화 (참조를 값을 바꾸기) (0) | 2023.05.15 |
Comments