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
- Protocol
- 스위프트
- 리펙터링
- clean architecture
- ios
- map
- Xcode
- collectionview
- ribs
- UITextView
- SWIFT
- 애니메이션
- RxCocoa
- uiscrollview
- 클린 코드
- HIG
- swiftUI
- Clean Code
- Human interface guide
- UICollectionView
- uitableview
- MVVM
- rxswift
- combine
- 리팩토링
- Refactoring
- Observable
- 리펙토링
- swift documentation
- tableView
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[Refactoring] 7-7. 기능 이동 (함수 이동, 중첩함수 제거, 모듈성) - 반복문 쪼개기 본문
Refactoring (리펙토링)
[Refactoring] 7-7. 기능 이동 (함수 이동, 중첩함수 제거, 모듈성) - 반복문 쪼개기
jake-kim 2023. 4. 27. 01:33반복문 쪼개기 개념
- 그저 두 일을 한꺼번에 처리할 수 있어서 한 반복문 안에 두 가지의 일을 처리하는 경우가 있는데, 이렇게되면 반복문을 수정할 때 마다 두 가지 일 모두를 이해하고 진행해야 하므로, 분리해둘때 더욱 리펙토링이 용이
// 하나의 반복문에서 두 가지의 일 (averageAge, totalSalary를 처리하는 상황)
struct Person {
var age = 1
var salary = 2
}
var averageAge = 0
var totalSalary = 0
let people = [Person(), Person(), Person()]
for p in people {
averageAge += p.age
totalSalary += p.salary
}
averageAge /= people.count
print(averageAge, totalSalary)
- 반복문 쪼개기로 리펙토링
- 반복문이 분리되어 각 반복문 안의 하나의 동작만 이해하면됨
- 반복문을 두 번 실행해야 하므로 안좋게 생각할 수 있지만, 해당 리펙토링의 진정한 의미는 하나의 반복문에서 하나만 고려할 수 있다는 것이고, 이렇게 된다면 해당 코드 뭉치를 함수로 뺄 수 있다는 의미
struct Person {
var age = 1
var salary = 2
}
var averageAge = 0
let people = [Person(), Person(), Person()]
for p in people {
averageAge += p.age
}
var totalSalary = 0
for p in people {
totalSalary += p.salary
}
averageAge /= people.count
print(averageAge, totalSalary)
- 최적화
- 리펙토링을 통해 반복문에서 하나만 고려하게 되었으므로 이 코드 뭉치를 함수로 뺄 수 있음
struct Person {
var age = 1
var salary = 2
}
let people = [Person(), Person(), Person()]
var averageAge = getSumOfAge()
var totalSalary = getSomOfSalary()
averageAge /= people.count
print(averageAge, totalSalary)
func getSumOfAge() -> Int {
var sum = 0
for p in people {
sum += p.age
}
return sum
}
func getSomOfSalary() -> Int {
var sum = 0
for p in people {
sum += p.salary
}
return sum
}
정리
- 하나의 반복문에서는 하나만 처리하도록 리펙토링
- 반복문이 여러개 생성되어 이 리펙토링은 비효율으로 비춰질수 있으나, 하나의 반복문에서 하나만 처리하므로 더욱 이해하기 쉽고 함수로 빼는 최적화를 통해 더욱 좋은 코드를 만들 수 있음
- 하나만 처리하도록 되면 하나의 함수로 뺄 수 있고, 함수로 빼고 수정하면 완료
* 참고
- Refactoring (Marting Flowler)
'Refactoring (리펙토링)' 카테고리의 다른 글
[Refactoring] 8-1. 데이터 조작화 (변수 쪼개기) (0) | 2023.05.12 |
---|---|
[Refactoring] 7-8. 기능 이동 (함수 이동, 중첩함수 제거, 모듈성) - 반복문을 파이프라인으로 바꾸기, 선언형 프로그래밍 (0) | 2023.04.28 |
[Refactoring] 7-6. 기능 이동 (함수 이동, 중첩함수 제거, 모듈성) - 문장 슬라이드 (0) | 2023.04.25 |
[Refactoring] 7-5. 기능 이동 (함수 옮기기, 중첩함수 제거, 모듈성) - 인라인 코드를 함수 호출로 바꾸기 (0) | 2023.04.23 |
[Refactoring] 7-4. 기능 이동 (함수 옮기기, 중첩함수 제거, 모듈성) - 문장을 호출한 곳으로 옮기기 (0) | 2023.04.19 |
Comments