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
- Clean Code
- ios
- UICollectionView
- uitableview
- Xcode
- clean architecture
- swiftUI
- uiscrollview
- MVVM
- UITextView
- SWIFT
- rxswift
- Observable
- 리펙토링
- 클린 코드
- 애니메이션
- collectionview
- Human interface guide
- 리펙터링
- ribs
- map
- 스위프트
- Refactoring
- swift documentation
- Protocol
- HIG
- 리팩토링
- combine
- RxCocoa
- tableView
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[Refactoring] 10-4 API 리펙토링 (매개변수를 질의 함수로 바꾸기) 본문
cf) 파생과 질의 구분하기
- 파생(Derived) 변수: 사용하는쪽에서 관심 밖의 변수들에도 영향을 주는 것
- 질의(Query) 함수: 사용하는쪽에서 관심 대상인 변수에만 영향을 주는 것 (단순 get, set)
매개변수를 질의 함수로 바꾸기
- 함수의 동작에 변화를 주는 요인은 함수의 매개변수
- 즉, 함수의 동작에 변화를 주는 요인을 구성할 때 짧으면 짧을수록 이해하기가 쉬운 형태의 함수
- 함수가 스스로 쉽게 결정할 수 있는 값을 매개변수로 건네는 것도 일종의 중복이므로, 이 결정은 함수안에서 결정하게하여 더욱 간결한 함수형태로 변경이 필요
ex) 함수를 사용하는 쪽에서 person, person.name을 넘기는데, 중복코드가 발생
let person = Person(age: 1, name: "jake")
let info = getPersonInfoString(person: person, name: person.name)
print(info)
private func getPersonInfoString(person: Person, name: String) -> String {
"\(person.age) + \(name)"
}
- 이런 경우는 person만 넘기도록 수정이 필요
private func getPersonInfoString(person: Person) -> String {
"\(person.age) + \(person.name)"
}
- 위 코드에서 name의 매개변수를 제거하고 person만을 남겨둔 것의 의미 더욱 생각하기
- name 값에 대한 책임 주체는 원래 해당 함수를 호출하는 쪽이었는데, 리펙토링된 후에는 name 값에 대한 관리 주체가 함수 내부가 된 것
책임을 함수 내부로 돌리는 것이 더욱 좋은 코드일까?
- 책임을 함수 내부로 돌리게되면 함수가 더욱 간결해져서 이해가 쉬워지고, 호출하는 여러곳에서의 코드 중복이 줄어들게되어 좋은 코드 유지가 가능
- 위 코드에서는 name 매개변수를 제거하고 person이라는 매개변수만 살려놓았는데, 이렇게 되면 호출하는 쪽은 간소화되고 함수 내부는 코드량이 증가된 상태
- 책임을 함수 내부로 돌린 상황
- '함수'라는 것은 다양한 곳에서 호출될 수 있는 하나의 '기능'이므로 이 함수를 사용하는 쪽의 코드들이 여러개 있을 것이라 생각한다면 가능하면 함수 내부에서 처리하고 호출하는 쪽은 단순화하도록 하는것이 코드 중복을 막을 수 있는 장점이 존재
* 참고
- Refactoring (Martin Flowler)
'Refactoring (리펙토링)' 카테고리의 다른 글
[Refactoring] 10-6 API 리펙토링 (오류 코드를 예외로 바꾸기) (0) | 2023.07.13 |
---|---|
[Refactoring] 10-5 API 리펙토링 (수정된 값 반환하기) (0) | 2023.07.12 |
[Refactoring] 10-3 API 리펙토링 (공통 모델에서 필요한 부분을 protocol을 사용하여 가져오기) (0) | 2023.07.07 |
[Refactoring] 10-2 API 리펙토링 (객체 통째로 넘기기) (0) | 2023.06.21 |
[Refactoring] 10-1 API 리펙토링 (질의 함수와 변경 함수 분리하기) (0) | 2023.06.06 |
Comments