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
- Observable
- 애니메이션
- HIG
- RxCocoa
- clean architecture
- 리펙터링
- Refactoring
- swift documentation
- map
- ios
- uitableview
- uiscrollview
- swiftUI
- UICollectionView
- MVVM
- 스위프트
- Xcode
- 클린 코드
- Protocol
- UITextView
- rxswift
- collectionview
- 리팩토링
- Human interface guide
- combine
- tableView
- Clean Code
- ribs
- SWIFT
- 리펙토링
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[Refactoring] 10-2 API 리펙토링 (객체 통째로 넘기기) 본문
객체 통째로 넘기기
- 객체에서 특정 값들을 가져와서 그 값들을 함수에 넘겨서 특정 일을 수행하는 것보다, 객체 통째로 파라미터로 넘길 것
- 이유1) 수정해야할 기획 의도가 생겼을 때, 객체 통째로 넘기게 되면 매개변수 목록은 수정하지 않아도 되는 편리함
- 이유2) 매개변수의 개수가 짧아져서 일반적으로는 함수 사용법의 이해가 올라감
- 이유3) 객체를 통째로 넘기지 않으면, 함수들끼리 같은 데이터를 사용하는 부분이 있을 것이고, 중복될 가능성이 커짐 (레코드를 통째로 넘기게 된다면 중복 로직을 방지할 수 있음)
객체 통째로 넘기기 예시)
- Room 이라는 인스턴스와 HeatingPlan 인스턴스가 존재
- Room은 현재 방의 온도와 적절 온도 범위가 존재
- HeatingPlan은 온도의 범위를 체크하는 일과 추후에 온도를 조절하는 기능을 담당
struct Room {
struct TemparatureRange {
let low: Int
let high: Int
}
let range = TemparatureRange(low: 17, high: 32)
let currentTemparature: Int
}
struct HeatingPlan {
func containsInRange(low: Int, high: Int, temparature: Int) -> Bool {
(low...high) ~= temparature
}
}
let room = Room(currentTemparature: 10)
let heatingPlan = HeatingPlan()
let containsInRange = heatingPlan.containsInRange(low: room.range.low, high: room.range.high, temparature: room.currentTemparature)
- HeatingPlan 메소드에 객체를 넘기도록 수정
struct HeatingPlan {
// refactor
func refactor_containsInRange(room: Room) -> Bool {
(room.range.low...room.range.high) ~= room.currentTemparature
}
}
let room = Room(currentTemparature: 10)
let heatingPlan = HeatingPlan()
let refactor_containsInRange = heatingPlan.refactor_containsInRange(room: room)
* 참고
- Refactoring (Martin Flowler)
'Refactoring (리펙토링)' 카테고리의 다른 글
[Refactoring] 10-4 API 리펙토링 (매개변수를 질의 함수로 바꾸기) (0) | 2023.07.09 |
---|---|
[Refactoring] 10-3 API 리펙토링 (공통 모델에서 필요한 부분을 protocol을 사용하여 가져오기) (0) | 2023.07.07 |
[Refactoring] 10-1 API 리펙토링 (질의 함수와 변경 함수 분리하기) (0) | 2023.06.06 |
[Refactoring] 9-6 조건부 로직 최소화 (Assertion 추가하기) (0) | 2023.06.05 |
[Refactoring] 9-5 조건부 로직 최소화 (조건부 로직을 protocol로 리펙토링하기) (0) | 2023.06.04 |
Comments