본문 바로가기

iOS/UIKit

UIKit Delegate 패턴 뿌수다 부서지기...

이번주부터 UIKit공부를 시작했는데 오늘 delegate 개념이 나왔다…

사실 봤던 기억은 나는데 헷갈리기도 하고 개념이 정리가 안되는거임…

그래서 미루고 미루다가 정리하려고 하는데… 두달 전에도 정리하다가 말았네… 오늘은 진짜 해야지… 진ㅉ... 로...

Delegate 가 뭘까요

사실 유킷 공부하다보면 지이이인짜 많이 쓰이는게 delegate 패턴인듯(내 생각임)

그리고 나처럼 처음 공부하는 사람은 지이이인짜 헷갈리는 게 이거인거 같음

뭔가 알듯 말듯 알쏭달쏭 정리가 안됨

Delegate는 번역하면 대리자 라는 뜻임. 그래서 간단하게 표현하면

  • 객체와 객체 사이의 소통을 대신 해주는 역할을 수행한다고 볼 수 있음

그리고 프로토콜(대리자)을 채택해서 실제로 구현해서 사용함

내가 이해 한 바로는 만약에 textField와 View가 있다고 가정.

이 둘은 각각이 서로다른 객체잖아요?

그래서 textField에서 이벤트가 발생했을 때 행동을 View에 delegate를 이용해서 위임해서 대신 처리를 하는거임

이때 delegate는 프로토콜로 구현이 되어 있음.

textField.delegate = View 이와 같은 방법으로 textField에서의 역할을 View에 위임

Delegate는 왜 쓰냐 그럼?

아니 근데 그럼 뭔지는 대충 알겠거든요?? 근데 이거 왜 쓰는거임?? 걍 textField에서 다 처리하면 안됨?

왜 굳이 위임해서 하는거임 사람 헷갈리게?

이벤트가 발생했을 때 그 시점에서 채택한 객체와 객체간의 상호 통신을 돕기 위해서라고 함!

따라서 다른 객체에서 코드를 작성한 후, 그 객체의 코드를 호출해서 사용해야 하는거임

진짜 정리

  • delegate는 객체간의 소통을 위해 사용함
    • 객체간의 이벤트 처리라고 보면 될듯?(받아서 어케 처리할지)
  • 한 객체가 이벤트를 받으면 그에 맞는 행동을 delegate(또 다른 객체)에 위임하여 동작
  • delegate는 캡슐화된 내부 코드없이 동작하기 위해서 필요함

간단한 예로 보겠삼. (앨런님의 강의 코드임)

 

우선 위임하고자 하는 내용이 프로토콜의 형태로 선언.

이후 이벤트를 직접 받는 역할을 할 리모컨 Class를 생성합니다.

이때 delegate 변수를 이용해서 다른 객체에게 위임할 준비를 해야합니다.

이후 다음과 같이 delegate를 채택하여 사용할 수 있습니다.

참고로 init을 사용해서 초기화로 넘기는 방법으로 많이 사용함!

위 예에서는 delegate를 직접 생성해서 보여준 예시일 뿐이구여

실제로는 textField나 TableView 등 이미 만들어져 있어서 채택해서 위와 같은 순서로 사용하기만 하면 됩니다.

 

textField를 예제로 간—-단하게 코드를 보여드리겠습니다.

 

Delegate를 사용하려면 채택을 해야 사용할 수 있습니다!

따라서 프로토콜로 구현된 UITextFieldDelegate를 채택하여 주고,

뷰가 나타날 때 textField의 delegate를 self(여기선 ViewController)로 위임하여 줍니다.

 

위 예시랑 비교해보면 UITextFieldDelegate가 RemoteControlDelegate이고

RemoteControl이 textField, TV가 ViewController 정도 될 것 같습니당

그러면 이제 Delegate에 정의되어 있는 함수를 사용할 수 있습니다.

몇몇 오브젝트(TableView) 등은 필수적으로 구현해줘야 하는 함수가 있지만 textField는 필수 구현은 없기 때문에 개발자의 필요에 따라 구현해서 사용하면 됩니다!

하나의 예로는 아래와 같은 함수가 있습니다.

본인이 원하는 로직을 구성하여 사용하기만 하면 됩니다!

또는

앱을 만들다보면 뷰가 여러개 생길일이 대부분일텐데 이 때 뷰 간 데이터를 주고받을 때에도 사용할 수 있습니다!

요부분은 UIKit에서 뷰 간 데이터 전달로 따로 정리해서 올려보도록 하겠습니다!

주의할 점

위 예에서 delegate를 선언할 때 strong으로 했지만 실제로는 weak로 선언하는 것이 안전함.

왜냐하면 Strong Reference Cycle이 생길 수 도 있기 때문이지!요!

(사실 strong, weak 등 메모리 참조에 대해 공부를 아직 못해서 공부하고 수정하겠습니다 ㅠ)

 

 

감사하신분들~!


iOS ) 왕초보를 위한 delegate정리

 

iOS ) 왕초보를 위한 delegate정리

swift 공부를 하면서 꼭 알아야하는 개념 중 하나가 delegate개념인데요, 저같은 경우에는 자료들도 다 영어고 한글로 된 설명을 봐도 너무 이해하기가 어렵더라구요 :( 요 며칠간 공부를 하다가 어

zeddios.tistory.com

[iOS] Delegate 패턴을 이해해보자

 

[iOS] Delegate 패턴을 이해해보자

Delegate v.(권한업무 등을) 위임하다

velog.io

앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지 - 인프런 | 강의

 

앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지 - 인프런 | 강의

탄탄한 신입 iOS개발자가 되기 위한 기본기 갖추기. 15개의 앱을 만들어 보면서 익히는.. iOS프로그래밍의 기초, 15개의 앱을 만들면서 배우는 UIKit!근본부터 다른 강의, 들어보실래요? ☺️ 🎉 UIKit

www.inflearn.com

 

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

[Swift] Singleton Pattern  (1) 2023.08.15
UIKit ViewController Lifecycle  (1) 2023.07.23
UIKit TableView (1)  (0) 2023.07.06