Search
Duplicate

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

Created
2023/10/14 14:55
Tags
iOS
태그

 면접 질문 : Delegate란 무엇인지 설명하고, retain이 되는지 안되는지 그 이유를 함께 설명하시오.

Delegate

객체지향 프로그래밍에서 하나의 객체가 모든 일을 처리하는 것이 아니라 처리해야 할 일 중 일부를 다른 객체에 넘기는 것
효율성 관점에서 아주 중요한 역할을 한다. 기능을 위임할 수 있는 객체가 있다는 것은 그만큼 직접 구현해야 하는 부분이 적다는 뜻이기 때문에 큰 규모의 프로그램을 빠르게 구현 가능하다.
 Delegate란 하나의 객체가 모든 일을 처리하는 것이 아니라 처리해야 할 일 중 일부를 다른 객체에게 위임하는 것이다. 객체의 행동을 단순화 시키고 객체의 결합성을 최소화하는 장점이 있다.

Retain

Retain Cycle은 메모리가 해제되지 않고 유지되어 누수가 생기는 현상을 말한다.
두 객체간의 참조가 강한 순환참조가 생겨 메모리에서 해제되지 않는 현상이다.
따라서 Delegate 또한 객체간의 참조가 이루어지기 때문에 Retain Cycle 현상이 발생할 수 있다.
따라서 TableView와 같이 delegate를 weak으로 선언하여 메모리가 해제 될 시 자동으로 해제시켜 주어야 한다.

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

→ Retain은 객체가 메모리에서 해제되지 않도록 호출되어 레퍼런스 카운트를 증가시키는데, Delegate는 객체끼리 참조값을 사용하기 때문에 retain이 된다.
❗️메모리 누수를 방지하기 위해 프로토콜이 AnyObjecct를 채택하여 class에서만 해당 프로토콜을 채택할 수 있도록 만들어주고, delegate를 weak로 선언하여 사용한다.