#11 Delegation(위임)에 대해서 알아봅시다.

2011. 1. 13. 14:25OS/iOS

iPhone SDK 위에서 응용프로그램을 제작하기 위해서는 아래 3가지 개념이 중심이 된다고 합니다.

1) Delegation
  위임, 하나의 객체가 지정된 다른 객체로 주기적으로 메시지를 보내서, 
  해당 메세지를 처리할 수 있다면 처리할 것을 요구하는 형태를 말한다. 
  또는 특정 이벤트가 발생한 경우 그 이벤트를 지정된 다른 객체로 전달하여 처리 할 것을 요구하는 것을 말함.
  위임 이벤트를 만나는 것은 어플리케이션이 실행되는 첫 순간부터이다.
  어플리케이션 객체는 초기 시작 처리가 다 끝나고 나서 applicationDidFinishLaunching: 이라는 이름의 이벤트를 지정된 객체로 전달한다. 

2) Model View Controller
  코코아 터치는 완벽한 MVC 패턴의 구조로 구성되어 있다.
  최대한의 재사용성을 보장하기 위해, 3개의 범주에 포함되어야 하면서도, 겹쳐지거나 명확하지 않으면 안된다.

  1) 모델 : 어플리케이션의 데이터를 저장하는 클래스
     --> 어플리케이션의 데이터를 저장하기 위해 고안된 오브젝티브C 클래스를 생성하거나, 
           코어 데이터를 사용한 데이터 모델을 생성함으로 만들수 있다.
  2) 뷰 : 윈도우, 컨트롤과 같이 사용자의 눈으로 볼 수 있고 상호작용할 수 있는 요소들로 구성됨.
  3) 컨트롤러 : 모델과 뷰를 서로 연결하고 사용자의 입력을 어떻게 처리할지 결정하는 어플리케이션 로직 
     --> 완전한 커스텀 클래스(NSObject의 하위클래스)의 형태로 만들수 있다. 
          UIKit 프레임워크 안에 있는 범용적인 컨트롤러 클래스를 상속받아서 나만의 컨트롤러 클래스를 만들게 된다.

3) Target- Action
   만약 화면에 있는 버튼을 손가락으로 누른다면, 이벤트가 다른 오브젝트로 전달된다.
   그 이벤트를 받은 객체는 이벤트를 해석하고 그에 알맞는 명령을 수행하게 된다.
  이 단순한 메카니즘을 Target-Action 패턴이라고 한다. 

자 그렇다면 우선 간단하게 Delegation에 대해서 좀더 알아본다. 

프로젝트를 새로 생성하여 시작해서,  MainWindow.xib 창에 있는 객체 아이콘을 보면,  XXX App Delegation Connections 이 있다
Referencing Outlets 으로 하나의 Outlet이 연결되어 있는데, Delegate 가 File's Owner 와 연결되어 있다.
File's Owner 객체를 선택해서 connections 를 살펴보면, 반대로 delegate가 XXXApp Delegate 객체와 연결되어 있는 것을 확인할수 있다. 


이전에  File's Owner는 어플 자체의 인스턴스를 의미한다고 했다. 
여기에 delegate 클래스로 XXX App Delegate가 등록되어 있는 것이다. XXX  App Delegate 클래스를 생성하고 그것을 File's Owner의 delegate 메시지를 받도록 등록되어 있는 이유는 모두 템플릿이 기본적으로 자동 생성해 준 덕분이다.  이렇기에 XXXAppDelegate.m 객체로 응용 프로그램의 delegate이벤트가 전달된다. 

이렇게 지정된 규칙에 따라,  처음 실행시 최초의 MainWindow.xib에 연결된 delegate 연결을 보고 '위임' 메시지를 보내기 시작한다.
그렇게 처음 보내기 시작하는 메시지 이름은 applicationDidFinishLaunching: 이다. 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {    

    

    // Override point for customization after application launch.


    // Add the view controller's view to the window and display.

    [self.window addSubview:viewController.view];

    [self.window makeKeyAndVisible];


    return YES;

}


위 코드는 XXXAppDelegate.m 파일에 일부다.

윈도우에 하나의 View를 추가하고, 그 윈도우를 화면에 보여주는 내용이다.

이와 같이 XXXAppDelegate.m 파일는 해당 어플의 Delegate 메시지를 처리하는 코드들이 있으며, 현재는 없지만 필요한 Delegate메시지 처리 코드를 추가 할 수도 있다.



- (void)dealloc {

    [viewController release];

    [window release];

    [super dealloc];

}



추가적으로 프로그램이 종료될때는 dealloc 메시지를 전달한다.

여기서는 메모리를 해제하는 코드들이 있게 되는데 delegate 객체에서는 응용 프로그램이 위임하는 각종 이벤트를 방아서 처리하게 된다.



Outlet은 단지  xib 파일에서 아이템을 서로 연결하는데에 사용되는 인스턴스 변수와 같은 것이다.
XXXViewController에 이런 인스턴스 변수가 있는 이유는, 모든 View는 UIViewController에서 상속되기 때문이다.

아..오늘은 여기까지..

'OS > iOS' 카테고리의 다른 글

복사하기 붙여넣기~ ㅎㅎㅎ  (0) 2011.03.18
Objective-C 기초  (0) 2011.02.16
인트로 페이지를 추가합시다.  (0) 2011.02.15
#12 XCode 단축키 점령기  (0) 2011.01.29
$08. 탭바와 피커  (0) 2011.01.27
#10 XCode , Interface Builder 분석  (0) 2011.01.13
#09 XCode 좌측메뉴(Groups & Files) 구성은??  (0) 2011.01.13
#08 Hello World 를 찍어봅시다.  (0) 2011.01.12
#07 맥북 단축키 점령기  (0) 2011.01.11
#06 XCode and IOS SDK 설치  (0) 2011.01.05