참조
하나의 스크린에서 여러 Component들이 상호작용하여 데이터를 구성하는 것과, 다른 스크린과 소통을 구성하는 것은 개발하는 과정에서 공통적인 요소로 취급된다.
이러한 문제를 해결하기 위해서는 Swift에서는 여러가지 방법을 제시하지만, Delegate Pattern을 학습하고자 한다.
Delegate는 말 그대로, 권한의 위임이라는 뜻을 가진다. 아래의 예시처럼, Counter
와 Control
이라는 Class가 있다고 가정해보자.
class Counter {
private var value: Int = 0
func increment() {
self.value += 1
}
}
class Control {}
위의 예시에서, Counter
는 데이터를 저장 및 처리하는 단순한 클래스인 반면에, Control
은 유저에 의해 어플리케이션의 데이터를 바꾸기 위한 조작이 담길 것이다. 여기서 Counter
는 오직 데이터만 접근할 수 있는 것은 명확하다(해당 클래스의 권한은 데이터를 저장하는 것이기 때문에...) 그렇다면, 어떻게 Control
이 Counter
의 데이터를 접근하게 하는데 허락할 수 있을까?
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
}
}
위의 예시처럼, Control
은 Counter
에 참조가 걸렸으며, Control
에서 Counter
의 데이터를 조작할 수 있다.
아래의 예시처럼, Control
에서 buttonClicked를 호출할 때마다 Counter
의 value의 값을 증가시킨다.
// Delegator
class Control {
private var delegate: Counter
init(delegate: Counter) {
self.delegate = delegate
}
func buttonClicked() {
self.delegate.increment()
}
}