[swift] Delegate를 code로 간략하게 이해해보기

okstring·2021년 2월 3일
0

delegate

한 유형의 인스턴스가 다른 인스턴스를 대신하여 작동하는 패턴

  • weak로 지정하기 때문에 애플리케이션이 해당 델리게이트에서 어떠한 동작을 할 때만 쓰입니다.

  • weak로 하지 않으면 서로 참조하고 있기 때문에 메모리가 해제되지 않고 계속 낭비가 되기 때문에 이런 부분이 많아지면 앱이 죽을수도 있습니다.

  • 또한 weak를 사용하기 위해서는 프로토콜에 class를 상속받아야 합니다(class에서 사용이 가능하다는 뜻)

code

import Foundation


protocol KingDelegate: class {
    func sayGetOutOfTheWay()
}

class King {

    weak var delegate: KingDelegate?
    
    func sayIt() {
        self.delegate?.sayGetOutOfTheWay()
    }
    
}

class Servant: KingDelegate {

    func sayGetOutOfTheWay() {
        print("servant: Get out of the way")
    }
    
}


let servant = Servant()
let king = King()

king.delegate = servant

//-----------

king.sayIt()

DataSource vs Delegate

어떤 하나의 표(table)가 있다고 가정하고 DataSource와 Delegate를 구현했다고 했을 때

  • DataSource Method는 표의 줄을 몇 줄로 해줘, 표의 셀 크기 몇 으로 해줘 등등 요소들을 채택, 역할 수행

  • Delegate는 표를 보여줘, 표의 모든 행이 다 채워지면 보여줘 등등 동작을 채택, 역할 수행

이라고 볼 수 있다.

Delegate의 특징

  • 델리게이트 패턴은 1:1 패턴 관계에서 매우 유용하게 쓰인다
  • 프로토콜을 준수하기만 하면 되므로 유연한 편이다
  • 객체에 너무 많은 delegate를 만들지 않도록 주의해야 한다. 하나의 오브젝트에 여러 delegate가 필요한 경우 너무 많은 작업이 집중되어있다는 뜻이기도 하다
  • delegate에 nil이 들어가지 않게 주의를 해야 한다.

reference

https://velog.io/@iwwuf7/Swift-Delegate-Pattern에-대해서

https://you9010.tistory.com/275

https://zeddios.tistory.com/137

https://duwjdtn11.tistory.com/472

profile
step by step

0개의 댓글