반응형
Notice
Recent Posts
Recent Comments
Link
Today
Total
07-05 05:44
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
관리 메뉴

iOS 개발 기록 블로그

iOS (Swift) Delegate Design Pattern & Protocol 본문

iOS

iOS (Swift) Delegate Design Pattern & Protocol

crazydeer 2022. 6. 16. 00:15
반응형

iOS의 중요한 디자인 패턴 중에 하나인 delegate 패턴에 관해 알아보자.

전에 게시했던  중에 MVC, Model View Controller 디자인 패턴에 관한 글이 있다.

 

 

iOS(Swift) Design Pattern: MVC (Model View Controller) 1편

iOS App 프로그래밍에서 정말 정말 중요한 디자인 패턴 MVC를 알아보자. 우선 이 MVC나 MVVM 등 애플이 채택(?)한 디자인 패턴은 대부분의 채용에 필수요건으로 포함되어 있다. 그만큼 이것은 정말 중

crazydeer.tistory.com

 

그럼 Delegate 같은

또다른 디자인 패턴이  필요할까?

 

전에도 말했던 것처럼

디자인 패턴이란 흔한 문제들에 대한 증명된 해결방법이다.

 

여기서 '문제'라는 것은 무엇을 말할까?

애플의 경우를 살펴보자.

우리가 사용하기 쉽도록 UITextField 같은 템플릿 코드가 존재한다.

 안에는 미리 정의된 Property Method들이 존재한다.

 

그리고 우리는 하나의 스크립트에서 이를 사용한다.

사용자들이 텍스트 필드를 터치하여 텍스트를 입력하기 시작한 시점

감지해서 특정 action 취할  있다.

예를 들어 아래와 같이 말이다.

func textFieldDidBeginEditing() {
    // do something
}

 

 감지를 받는 WeatherViewController 있다.

그리고 별개의 또다른 클래스에서도 마찬가지로

사용자가 텍스트를 입력하기 시작한 시점을 받고 싶을 

 

바로 'Delegate Pattern' 사용하는 것이다.

그리고 델리게이트 밑에 Protocol 기반이 되어 있다.

Protocol 관해서는 지난 글을 참고하자.

 

 

iOS (Swift) Protocol 이란?

지난 글에서 UITextFieldDelegate 라는 프로토콜이 있었다. 코드 class Bird {   var isFemale= true     func layEgg() {   if isFemale{   print("Lay egg.") } }     func fly() {   prin..

crazydeer.tistory.com

 

이번의 경우에는 다음과 같은 프로토콜이 있을  있다.

protocol CanDealWithUITextFields {
    func textFieldDidBeginEditing()
}

 

Apple  protocol 사용하여

어디서든 textFieldDidBeginEditing 함수를 만들게 해서

사용자의 텍스트 필드  진입하여 편집을 시작하는 시점을

  있도록  것이다.

UITextFieldDelegate protocol

 

바로 이게 UITextFieldDelegate 라고 불리는 프로토콜인 것이다.

 

다시 UITextField 돌아가서

 안에 아래와 같은 delgate 있고 데이터 타입이 요구된다. 

 

UITextField 템플릿

var delgate: UITextFieldDelegate
methods...

 

 

 

 

 

우리의 코드를 살펴보면 UITextFieldDelegate라는 프로토콜을

WeatherViewController class 넣어주었고 (11번째 )

 

16 line: 

  • searchTextField라는 UITextField 생성해주었다.
  • 기존에 Apple에서 만들어놓은 TextField 관한 템플릿 코드를 사용하기 위하여 참조한 것이다. (reference)

 

21 line: 

  •  텍스트필드 오브젝트의 delegate self 준다.
  • 그렇게 기존의 UITextField 템플릿 코드 안에 있던 
    var delgate: UITextFieldDelegate

     WeatherViewController 연결됐다고 이해하면   같고
    그로
     인해 사용자의 편집 시작 트리거가 발동하여
    WeatherViewController
     textFieldDidBeginEditing() 함수가 동작한다.

 

 

애플의 UITextField  같은 템플릿 코드는 기밀이기 때문에

소스 코드를 살펴볼  없다.

단지 이를 가져다가 원하는 클래스에서 사용할  있다.

바로 재사용성 위함이다.

 

한가지 중요한건 아니지만 용어 정리하자면

class 클래스명: 부모명(SuperClass), 프로토콜1, 프로토콜2 {}

이런 식으로 쓰고 해당 클래스는 Super Class에게 '상속받는다'라고 하며

프로토콜을 '채택(adopt)한다'라고 한다.

 

 

 

 

참고

안젤라유 강의: https://www.udemy.com/course/ios-13-app-development-bootcamp/

 

iOS & Swift - The Complete iOS App Development Bootcamp

From Beginner to iOS App Developer with Just One Course! Fully Updated with a Comprehensive Module Dedicated to SwiftUI!

www.udemy.com

 

반응형