[swift] Deligate Pattern
케이스 1
// MARK: -Delegation 없이 두 객체가 서로를 보는 경우
class Writer {
var writtenScriptPage: Int
var manager: Manager?
var gameID: String
var hasFinalScript: Bool
init(writtenScriptPage: Int, manager: Manager, gameID: String, var hasFinalScript: Bool = false) {
self.writtenScriptPage = writtenScriptPage
self.manager = manager
self.gameID = gameID
self.hasFinalScript = hasFinalScript
self.manager?.writer = self
}
func write(for hours: Int) {
self.writtenScriptPage += hours
}
func proofread() {
hasFinalScript = true
}
}
class Manager {
var writer: Writer?
init() {
self.writer?.manager = self
}
func upload() {
writer?.proofread()
let finalScript = writer?.hasFinalScript
if finalScript != nil {
print("최종본이 업로드되었습니다.")
} else {
print("작가가 기한 내 원고를 제출하지 못했습니다.")
}
}
}
let manager = Manager()
let writer = Writer(writtenScriptPage: 350, manager: manager, gameID: "gosari9876")
manager.upload()
케이스 2
// MARK: - Delegation을 이용하는 경우
protocol Writable {
var manager: Manageable? { get set }
var hasFinalScript: Bool { get }
func proofread()
}
protocol Manageable {
var writer: Writable? { get set }
}
class Writer: Writable {
var writtenScriptPage: Int
var manager: Manageable?
var gameID: String
var hasFinalScript: Bool
init(writtenScriptPage: Int, manager: Manageable?, gameID: String, var hasFinalScript: Bool = false) {
self.writtenScriptPage = writtenScriptPage
self.manager = manager
self.gameID = gameID
self.hasFinalScript = hasFinalScript
self.manager?.writer = self
}
func write(for hours: Int) {
self.writtenScriptPage += hours
}
func proofread() {
hasFinalScript = true
}
}
class Manager: Manageable {
var writer: Writable?
init() {
self.writer?.manager = self
}
func upload() {
writer?.proofread()
let finalScript = writer?.hasFinalScript
if finalScript != nil {
print("최종본이 업로드되었습니다.")
} else {
print("작가가 기한 내 원고를 제출하지 못했습니다.")
}
}
}
let manager = Manager()
let writer = Writer(writtenScriptPage: 350, manager: manager, gameID: "gosari9876")
manager.upload()
케이스 1의 경우:
- 참조 순환이 발생한다.
- 각 객체의 책임과 무관하게 다른 객체의 정보에 접근할 수 있다.
케이스 2의 경우:
- 케이스 1의 문제가 보완된다.
- SOLID의 개방-폐쇄 원칙을 따른다.
이전에 작성한 내용
봐도 봐도 이해가 안 되니까 보던 링크라도 정리해보자...
- 공식문서- Protocols/ Delegation
- iOS Delegate 패턴에 대해서 알아보기
- Delegation in Swift Explained
- swift Delegation 스위프트 델리게이트 개념 이해하기
- [Swift] 딜리게이션 패턴(Delegation Pattern)
Author And Source
이 문제에 관하여([swift] Deligate Pattern), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@gosari/swift-Deligate-Pattern저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)