델리게이트란 무엇인가?
델리게이트는 사전적 의미로 위임하다라는 뜻입니다. Cocoa Touch에서 델리게이트는 다른 객체를 대신해 특정 작업을 수행하는 클래스를 말합니다. 다시말해 한 오브젝트가 모든 기능을 수행하지 않고, 일부 기능을 다른 객체에게 위임하는 객체 지향 프로그래밍 디자인 패턴을 뜻합니다. 그리고 그 도움을 주는 객체를 델리게이트라고 부릅니다.
Objective-C 프로그래밍에 있어서 델리게이트는 매우 중요한 요소라고 할 수 있습니다. 이 델리게이트가 어플리케이션의 생명주기와도 갚은 연관이 있기 때문인데, 델리게이트가 없다면 생명을 잃어버린 애플리케이션이라고 말 할 수 있습니다.
애플리케이션의 생명주기
어떤 프로그램이든 소스 코드를 통하여 메모리에 적재되고, 실행되는 동안 주어진 역할을 수행하고, 임무를 완수할 경우에는 메모리에서 삭제되는 새명주기 싸이클이 존재합니다. 아이폰의 어플리케이션도 이러한 패턴을 무시할 수 없습니다. 아래의 그림은 아이폰 어플리케이션의 생명주기를 나타낸 것입니다.
어플리케이션의 생명주기는 실행과 종료 사이에 발생하는 순차적인 이벤트들을 만들어냅니다. 사용자는 아이폰의 스크린의 아이콘을 선택하여 어플리케이션을 실행하게 됩니다. 이후에 시스템은 진행상태를 보여주고 어플리케이션의 main함수를 호출합니다. 이때부터 초기화를 위한 작업들이 UIKit으로 넘어오는데, 어플리케이션의 UI를 불러오고 이벤트 루프를 준비하는 작업들이 포함됩니다. 이벤트 루프 과정에서 UIKit은 커스텀 객체로의 이벤트 전달과 어플리케이션에서 발생한 명령들을 처리하는 것을 조절하게 됩니다. 사용자가 프로그램을 종료하는 이벤트를 발생하면, UIKit을 통해서 어플리케이션에 종료명령을 발생하고 종료가 진행됩니다.
어플리케이션 델리게이트
어플리케이션 델리게이트(Application Delegate) 객체의 역할은 어플리케이션의 동작을 모니터링 하는 것입니다. 변수의 경우, 각 변수가 가지고 있는 값들을 어떤 특정한 패턴, 함수에 의해 변형되어, 개발자의 의도대로 결과 값을 얻을 수 있습니다. 이런 특징적인 역할을 하는 함수(모듈, 객체, 메소드 등)들을 특정한 조건이나 의도를 가지고 묶음으로 만들어내어 보다 간편하게 사용하도록 하는 것이 델리게이트를 사용하는 목적이라고 할 수 있습니다. 또 한가지 델리게이트를 사용하는 이유는 UIApplication과 같은 복잡한 객체를 상속하는 것을 피하고, 메소드를 재정의 하지 않음으로써 보다 객체지향적인 프로그래밍을 할 수 있도록 도와주게 됩니다. 아래의 그림은 객체가 델리게이트를 통해 특정 액션을 실행하는 과정을 표현한 것 입니다.
어플리케이션이 어떤한 액션을 만