본문 바로가기

Development/iOS

protocol 과 delegate 기본 사용법.

protocol 과 delegate 로 삽질 좀 했다.

시간이 지나면 잊어버릴까봐 기록으로 남긴다.


protocol 과 delegate 의 개념 등등은 책을 참고로 하기로 하고 여기서는 예제코드로 설명한다.


사실 알고보면 사용법은 아주 간단하다.

여기서는 JWKLockViewController(줄여서 lock) 에서 JWKNewPasswordViewController(줄여서 new) 로 화면을 전환하면서 lock 뷰가 가지고 있던 데이터를 new 뷰로 같이 넘겨주기 위해서 사용한다.


아래의 소스를 보면 lock.h 에서 델리게이트를 사용하기위해서 정의를 하고 사용하는 메소드도 같이 정의했다.

그리고 delegate 프로퍼티도 정의했다.

여기서 중요한 점은 delegate 프로퍼티형은 weak 이다.


> JWKLockViewController.h





lock.m 에서 synthesize 해준다.


> JWKLockViewController.m





그리고 delegate 와 같이 정의한 메소드를 구현한다.

여기서는 "Hi, John Kim." 이라는 스트링을 세팅해서 넘겨줄 예정이다.

JWKLockViewController.m 파일에서 구현하는 부분이 이제 끝났다.


> JWKLockViewController.m





이제 JWKNewPasswordViewController 에서 구현해보자.

아래의 소스를 보면 JWKNewPasswordViewController.h 에서 lock 를 받아오기 위해서 먼저 import 를 한다.

그리고 interface 에서 앞서 선언한 MyTestDelegate 를 정의해 준다.

import 한 JWKNewPasswordViewController 를 프로퍼티로 정의한 부분도 있다.

이부분은 소스내부에서 처리해도 상관없다. 일관성을 위해서 헤더파일에서 같이 정의해 주었다.

JWKNewPasswordViewController 의 메소드는 헤더파일 맨 처음에서 import 하면서 사실 내부적으로 이미 포함되어 있다.

헤더파일에 따로 정의해도 되고 하지 않아도 상관없다.

여기서는 주석 처리해 주었다.


> JWKNewPasswordViewController.h





이제 JWKNewPasswordViewController.m 에서 구현한다.

먼저 앞서 선언한 프로퍼티를 synthesize 로 받아준다.

메소드를 구현해 준다. 앞서 lock 에서 정의/구현한 메소드를 구현하는데 스트링을 세팅하는 메소드이기 때문에 여기서는 제대로 값을 받아오는지 NSLog 로 출력해본다.


> JWKNewPasswordViewController.m





JWKLockViewController 를 초기화하고 델리게이트를 설정한다.

그리고 JWKNewPasswordViewController 에서 델리게이트의 값을 가져와서 사용하기 위해서는 JWKNewPasswordViewController 가 호출되었던 JWKLockViewController 의 메소드를 다시 콜해야 한다.


JWKLockViewController 뷰에서 passwordButtonTapped 버튼을 터치하면 호출되는 메소드에서 JWKNewPasswordViewController 뷰로 이동했기 때문에 아래의 소스를 보면

[jwkLockViewController passwordButtonTapped:nil];

이라고 구현되어 있다.

헷갈리는 부분이므로 이해하고 넘어가야 한다.


> JWKNewPasswordViewController.m




적어보니 얼마되지 않는 내용인데 상당히 중요한 내용이 들어 있다.

delegate 는 사용범위가 넓은데 한가지 비교를 하자면, 

안드로이드에서 intent 에 데이터를 담아서 화면이동이 가능한데 iOS 에서는 delegate 가 비슷한 기능을 한다고 볼 수 있다.