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
- collectionview
- 리펙토링
- swift documentation
- uitableview
- 스위프트
- rxswift
- Observable
- map
- 애니메이션
- ios
- 클린 코드
- SWIFT
- Human interface guide
- UICollectionView
- RxCocoa
- swiftUI
- clean architecture
- HIG
- Protocol
- 리펙터링
- ribs
- Xcode
- Refactoring
- combine
- UITextView
- tableView
- 리팩토링
- uiscrollview
- Clean Code
- MVVM
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] 복잡한 조건문 리펙토링 (if, else, else if, guard 문) 본문
Refactoring (리펙토링)
[iOS - swift] 복잡한 조건문 리펙토링 (if, else, else if, guard 문)
jake-kim 2023. 10. 27. 01:14복잡한 조건문
- 보통 복잡한 조건문은 코드의 깊이가 길어지는 형태
ex) 아래처럼 맨 처음 깊이는 if-else이며, if문 하위에 또다른 if-else가 있고, else하위에 if-else가 있어서 총 깊이가 3개짜리인 조건문
let isUserLoggedIn = true
let hasSubscription = false
let isContentAvailable = true
if isUserLoggedIn {
if hasSubscription {
print("사용자가 로그인하고 구독이 활성화되어 있습니다.")
} else {
if isContentAvailable {
print("사용자가 로그인했지만 구독이 없습니다. 콘텐츠를 사용할 수 있습니다.")
} else {
print("사용자가 로그인했지만 구독이 없으며 콘텐츠를 사용할 수 없습니다.")
}
}
} else {
print("사용자가 로그인하지 않았습니다.")
}
- 코드의 깊이가 길어지면 길어질수록 읽기가 어려워지며, 조건들을 하나하나 비교하며 수행
- 코드는 위에서 아래로 마치 소설처럼 자연스럽게 읽어나가야만 가독성이 좋고 이해하기 쉬운코드 유지가 가능
조건문의 깊이가 깊은 코드 리펙토링 방법
- if-else로 시작하고, 이 if문이나 else문 하위에 또 조건문이 들어가는 경우에 가장 필요한 작업은 코드의 깊이를 줄이는 것
- 대부분의 if-else문에 또 다른 조건문이 들어갈 때 깊이 줄이기가 가능
- 1단계) 단순한 조건문을 앞에 배치
- 복잡한 조건문이 초반에 등장하는것보단 단순한 조건문을 앞에 배치하고난 후 복잡한 조건문을 뒤에 배치
if !isUserLoggedIn {
print("사용자가 로그인하지 않았습니다.")
} else {
...
}
- 2단계) 2중 깊이로 있던 조건문을 else if로 표현
- if 조건문 후에는 모두 isUserLoggedIn이 true인 경우밖에 없으므로 else 하위에 따로 빼지 않아도, trure인 조건을 검사하지 않아도 되기 때문에 깊이가 줄어듦
if !isUserLoggedIn {
print("사용자가 로그인하지 않았습니다.")
} else if hasSubscription {
print("사용자가 로그인하고 구독이 활성화되어 있습니다.")
} else if isContentAvailable {
...
}
- 3단계) 이와 동일한 논리로 isUserLoggedIn && !hasSubscription && isContentAvailable인 케이스와 isUserLoggedIn && !hasSubscription && !isContentAvailable 도 바로 뒤에 작성이 가능
if !isUserLoggedIn {
print("사용자가 로그인하지 않았습니다.")
} else if hasSubscription {
print("사용자가 로그인하고 구독이 활성화되어 있습니다.")
} else if isContentAvailable {
print("사용자가 로그인했지만 구독이 없습니다. 콘텐츠를 사용할 수 있습니다.")
} else {
print("사용자가 로그인했지만 구독이 없으며 콘텐츠를 사용할 수 없습니다.")
}
정리
- 조건문이 깊어질수록 가독성 저하
- else if를 사용하면 앞전 분기문에 대한 부정문이 and조건으로 적용한다는 원리를 이해하면 조건문을 읽기 쉽게 작성이 가능
'Refactoring (리펙토링)' 카테고리의 다른 글
[iOS - swift] 2. weak self 동작 이해하기 - 외부에 weak self 선언하고 클로저에서 사용하는 경우 (#캡처리스트 [weak self] 리펙토링) (0) | 2023.11.05 |
---|---|
[iOS - swift] guard문 잘 사용하기 (#guard문 사용 시 주의사항, #이중부정, #2중부정) (0) | 2023.10.31 |
[Refactoring] 11-4 상속 리펙토링 (Wrapper 만들기) (0) | 2023.07.28 |
[Refactoring] 11-3 상속 리펙토링 (서브 클래스를 델리게이트로 바꾸기) (0) | 2023.07.27 |
[Refactoring] 11-2 상속 리펙토링 (enum case 타입 코드를 서브클래스로 바꾸기) (1) | 2023.07.25 |
Comments