- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- HTTP
- r
- sigmoid
- ios
- deeplearning
- scheduledTimer
- 시각화
- Observable
- swiftUI
- Request
- 딥러닝
- decode
- tapply
- Python
- 명령어
- SWIFT
- ReLU
- substr
- rest api
- SQL
- cocoapods
- 티스토리챌린지
- MVC
- barplot
- 오블완
- 연산자
- Optional
- rxswift
- struct
- Linux
iOS 개발 기록 블로그
iOS (Swift) Delegate Design Pattern & Protocol 본문
iOS의 중요한 디자인 패턴 중에 하나인 delegate 패턴에 관해 알아보자.
전에 게시했던 글 중에 MVC, Model View Controller 디자인 패턴에 관한 글이 있다.
그럼 Delegate와 같은
또다른 디자인 패턴이 왜 필요할까?
전에도 말했던 것처럼
디자인 패턴이란 흔한 문제들에 대한 증명된 해결방법이다.
여기서 '문제'라는 것은 무엇을 말할까?
애플의 경우를 살펴보자.
우리가 사용하기 쉽도록 UITextField와 같은 템플릿 코드가 존재한다.
그 안에는 미리 정의된 Property와 Method들이 존재한다.
그리고 우리는 하나의 스크립트에서 이를 사용한다.
사용자들이 텍스트 필드를 터치하여 텍스트를 입력하기 시작한 시점을
감지해서 특정 action을 취할 수 있다.
예를 들어 아래와 같이 말이다.
func textFieldDidBeginEditing() { // do something } |
위 감지를 받는 WeatherViewController가 있다.
그리고 별개의 또다른 클래스에서도 마찬가지로
사용자가 텍스트를 입력하기 시작한 시점을 받고 싶을 때
바로 'Delegate Pattern'을 사용하는 것이다.
그리고 델리게이트 밑에 Protocol이 기반이 되어 있다.
Protocol에 관해서는 지난 글을 참고하자.
이번의 경우에는 다음과 같은 프로토콜이 있을 수 있다.
protocol CanDealWithUITextFields { func textFieldDidBeginEditing() } |
Apple은 이 protocol을 사용하여
어디서든 textFieldDidBeginEditing 함수를 만들게 해서
사용자의 텍스트 필드 내 진입하여 편집을 시작하는 시점을
알 수 있도록 한 것이다.
바로 이게 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' 카테고리의 다른 글
iOS (Swift) OpenWeather API 모바일 앱에서 요청하기 (0) | 2022.06.21 |
---|---|
iOS (Swift) OpenWeather API 사용하는 법 (0) | 2022.06.20 |
iOS (Swift) Protocol 이란? (0) | 2022.06.15 |
iOS (Swift) UITextField 다루기 (0) | 2022.06.14 |
iOS(Swift) 배경 이미지 다크모드에 따라 바뀌게 하기 (0) | 2022.06.10 |