Refactoring (리펙토링)
[Refactoring] 6-3. 캡슐화 (위임 숨기기)
jake-kim
2023. 3. 25. 01:16
위임 숨기기
* swift에서 자주사용하는 delegate와는 다른 개념임을 주의
- B안에 C인스턴스가 있고 A가 C에 접근할때, B.C로 접근하지 않고 B에서 C를 리턴하는 메소드를 만들어, 사용하는 쪽에서는 B를 모르게끔 수정하는 방법 (기대효과: 사용하는쪽에서 B를 모르는 상태이므로, B의 코드를 수정할때 사용하는쪽을 신경쓰지 않고 쉽게 수정이 가능)
- 모듈화 설계의 핵심은 캡슐화이며, 캡슐화는 모듈들이 시스템의 다른 부분에 대해 알아야 할 내용을 줄여주는 것
- 무언가를 변경해야 할 때 함께 고려해야할 모듈 수가 적어져서 코드 변경이 쉬워짐
- 반대 리펙토링: 중개자 제거하기

위임 숨기기 예시)
리펙토링 전) 사용하는쪽에서 person.department.manager으로 접근하므로 department가 삭제되거나 수정될때 사용하는쪽의 코드도 고려해야하는 상황
struct Person {
let department = Department()
}
struct Department {
let manager = Manager()
}
struct Manager {
}
let person = Person()
let manager = person.department.manager
리펙토링 적용) 위임을 숨겨서(A.B.C를 A.C로 접근하도록) 의존성을 줄이기 - department를 볼 수 없게 숨기고, person에서 getManager()를 만들기
struct Person {
private let department = Department()
func getManager() -> Manager {
department.manager
}
}
struct Department {
let manager = Manager()
}
struct Manager {
}
let person = Person()
let manager = person.getManager()
* 참고
- Refactoring (Marting Flowler)