Skip to content

Delegate란 무엇인지 설명하고, retain 되는지 안되는지 그 이유를 함께 설명하시오. #34

@Glsme

Description

@Glsme

Delegate

디자인 패턴으로 클래스나 구조체의 책임 중 일부분을 다른 타입의 인스턴스에게 전달(위임)하는 역할을 하는 것입니다.



Delegate Pattern

위임자를 갖고 있는 객체가 다른 객체에게 자신의 일을 위임하는 형태의 디자인 패턴이다.

Delegate Pattern 동작 방식

  1. Delegate Protocol을 선언한다.
  2. 일을 전달하는 ViewController 내 프로퍼티에 Delegate를 저장한다.
  3. 일을 전달받을 ViewController에서 전달하는 ViewController 내 Delegate를 저장한 프로퍼티를 자신으로 위임자로 삼는다.
  4. 일을 전달받을 ViewController에서 일을 처리한다.



Delegate Pattern을 사용하면 retain되는 이유

Delegate Pattern을 사용하면 두개의 클래스가 서로 참조하는 상황이 필연적으로 발생한다.
이 때 일을 전달받을 ViewController에서 Delegate를 처리 후 일을 전달하는 ViewController는 이미 deinit이 되었기 때문에 일을 전달받은 입장에선 메모리를 해제할 수 없다.
따라서 메모리를 정상적으로 해제하려면 weak키워드를 붙여 MemoryLeak이 발생하지 않도록 해주어야한다.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions