post-custom-banner

참조
하나의 스크린에서 여러 Component들이 상호작용하여 데이터를 구성하는 것과, 다른 스크린과 소통을 구성하는 것은 개발하는 과정에서 공통적인 요소로 취급된다.

이러한 문제를 해결하기 위해서는 Swift에서는 여러가지 방법을 제시하지만, Delegate Pattern을 학습하고자 한다.

The Delegate Pattern

Delegate는 말 그대로, 권한의 위임이라는 뜻을 가진다. 아래의 예시처럼, CounterControl이라는 Class가 있다고 가정해보자.

class Counter {
    private var value: Int = 0

    func increment() {
        self.value += 1
    }
}

class Control {}

위의 예시에서, Counter는 데이터를 저장 및 처리하는 단순한 클래스인 반면에, Control은 유저에 의해 어플리케이션의 데이터를 바꾸기 위한 조작이 담길 것이다. 여기서 Counter는 오직 데이터만 접근할 수 있는 것은 명확하다(해당 클래스의 권한은 데이터를 저장하는 것이기 때문에...) 그렇다면, 어떻게 ControlCounter의 데이터를 접근하게 하는데 허락할 수 있을까?

Counter의 항목은 자체적으로 데이터를 수정할 수 있어, Control에서 Counter을 참조하면 된다.

// Delegate
class Counter {
    private var value: Int = 0

    func increment() {
        self.value += 1
    }
}

// Delegator
class Control {
    private var delegate: Counter

    init(delegate: Counter) {
        self.delegate = delegate
    }
}

위의 예시처럼, ControlCounter에 참조가 걸렸으며, Control에서 Counter의 데이터를 조작할 수 있다.

아래의 예시처럼, Control에서 buttonClicked를 호출할 때마다 Counter의 value의 값을 증가시킨다.

// Delegator
class Control {
    private var delegate: Counter

    init(delegate: Counter) {
        self.delegate = delegate
    }

    func buttonClicked() {
        self.delegate.increment()
    }
}
profile
RTFM
post-custom-banner

0개의 댓글