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
- MVVM
- UICollectionView
- 클린 코드
- 리펙토링
- Clean Code
- ios
- collectionview
- combine
- map
- uiscrollview
- rxswift
- Protocol
- tableView
- Refactoring
- RxCocoa
- SWIFT
- UITextView
- 애니메이션
- clean architecture
- 스위프트
- 리팩토링
- Observable
- swiftUI
- HIG
- Human interface guide
- swift documentation
- Xcode
- ribs
- uitableview
- 리펙터링
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[Refactoring] 7-2. 기능 이동 (함수 옮기기, 중첩함수 제거, 모듈성) - 필드 옮기기 본문
Refactoring (리펙토링)
[Refactoring] 7-2. 기능 이동 (함수 옮기기, 중첩함수 제거, 모듈성) - 필드 옮기기
jake-kim 2023. 4. 17. 01:34필드 옮기기
- 데이터구조에서 맥락상 어울리지 않는 필드가 있다면 필드를 옮기는 방법
필드 옮기기가 필요한 배경
- 프로그램이 상당 부분 동작을 구현하는 코드로 이뤄지지만, 데이터 구조를 잘 활용하면 코드는 자연스럽게 단순하고 직관적으로 변경
- 데이터 구조를 잘못 선정하면 아귀가 맞지 않는 데이터를 다루기 위한 코드로 범벅되고 데이터 구조파악도 힘들게 됨
- 현재 데이터 구조가 적절치 않음을 깨닫게 된다면 곧바로 수정이 필요
ex) 필드 옮기기를 수행해야하는 상황
- 함수에 어떤 레코드를 넘길 때마다 또 다른 레코드의 필드도 넘기고 있는 경우
- 한 레코드를 변경하려 할 때 다른 레코드의 필드까지 변경해야하는 경우
- 레코드 뿐만이 아닌 클래스나 객체도 동일
필드 옮기기 리펙토링
ex) 고객(Customer)과 계약정보(CustomerContract)가 있을 때, 고객 모델에 discountRate 필드가 있는데 이 필드는 CustomerContract에 있어야 더 어울리는 상황
struct Customer {
let name: String
let discountRate: Double
let contract: CustomerContract
func getDiscountRate() -> Double {
discountRate
}
}
struct CustomerContract {
}
- CustomerContract에 discountRate를 넣고 모델 수정
struct Customer {
let name: String
let contract: CustomerContract
func getDiscountRate() -> Double {
contract.discountRate // <-
}
}
struct CustomerContract {
let discountRate: Double // <-
}
- 사용하는쪽에서는 customer인스턴스만 알고있다고 생각하면, customer쪽에서 discountRate를 변경해야 한다면 Customer에 setter도 추가
- swift에서는 computed property가 있으므로 이것으로 getter, setter 사용
struct Customer {
let name: String
var contract: CustomerContract
var discountRate: Double { // <-
get { contract.discountRate }
set { contract.discountRate = newValue }
}
}
* 참고
- Refactoring (Marting Flowler)
'Refactoring (리펙토링)' 카테고리의 다른 글
[Refactoring] 7-4. 기능 이동 (함수 옮기기, 중첩함수 제거, 모듈성) - 문장을 호출한 곳으로 옮기기 (0) | 2023.04.19 |
---|---|
[Refactoring] 7-3. 기능 이동 (함수 옮기기, 중첩함수 제거, 모듈성) - 문장을 함수로 옮기기 (0) | 2023.04.18 |
[Refactoring] 7-1. 기능 이동 (함수 옮기기, 중첩함수 제거, 모듈성) - 함수 옮기기 (0) | 2023.03.26 |
[Refactoring] 6-3. 캡슐화 (위임 숨기기) (0) | 2023.03.25 |
[Refactoring] 6-2. 캡슐화 (클래스 추출하기) (0) | 2023.03.22 |
Comments