Notice
Recent Posts
Recent Comments
Link
관리 메뉴

김종권의 iOS 앱 개발 알아가기

[Refactoring] 6-3. 캡슐화 (위임 숨기기) 본문

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)

 

Comments