델리게이트 패턴은 객체 지향 프로그래밍에서 자주 사용되는 디자인 패턴 중 하나이다.
- 하나의 객체가 다른 객체의 동작을 직접 구현할 필요가 없을때
- 객체 간의 결합도를 낮추고 유연성을 높이고자 할 때
- 이벤트 처리, 데이터 소스 및 테이블 뷰와 같은 UI 구성 요소에서 사용자 이벤트를 처리할 때 등
델리게이트(Delegate) : 델리게이트는 특정 작업을 수행하기 위해 다른 객체에게 일부 책임을 위임하는 객체(대리자) , 델리게이트는 프로토콜을 준수하여 정의되며, 메서드를 호출하여 작업을 수행한다.
델리게이트 프로토콜(Delegate Protocol): 델리게이트를 구현하기 위해 정의된 프로토콜 이다. 델리게이트 프로토콜은 델리게이트 객체가 구현해야 하는 메서드를 정의하고 있다.
델리게이트 객체(Delegate Object): 델리게이트를 수신하는 객체이다. 이 객체는 델리게이트 프로토콜을 준수하고 있으며, 필요한 작업을 수행하기 위해 델리게이트 메서드를 호출한다.
텍스트 필드를 사용할 때 델리게이트 패턴 사용
import UIKit
class ViewController: UIViewController, UITextFieldDelegate
// 사용할 메인뷰컨트롤에 텍스트필드 델리게이트를 선언한다.
override func viewDidLoad() {
super.viewDidLoad()
textField.delegate = self
}
// 그 후 앱이 실행되면 바로 실행되는 viewDidLoad에 텍스트필드 내 델리게이트를 선언
그 이후 텍스트필드를 사용하면서 선택적으로 원하는 기능을 가져다 사용할 수 있다.
텍스트필드 내 델리게이트를 통해 활용할 수 있는 함수는 매우 다양하게 존재하며 자세하게 이미 구현되어 있다. 선택해서 사용하면 된다.
ex) 예시
// 텍스트필드의 입력을 시작할때 호출 되는 메서드 ( 시작할지 말지 여부 허락 하는 것 )
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
return true
}
// 시점 -
func textFieldDidBeginEditing(_ textField: UITextField) {
print(#function)
print("유저가 텍스트필드의 입력을 시작했다.")
}
func textFieldShouldClear(_ textField: UITextField) -> Bool {
print(#function)
return true
}
// 텍스트필드 글자 내용이 입력되거나 지워질때 호출됨 (허락)
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
print(#function)
return true
}
// 텍스트필드의 엔터키가 눌러지면 다음 동작을 허락할 것인지 말것인지
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
print(#function)
return true
}
// 실제로 텍스트필드의 입력이 끝날때 호출 끝날지 말지를 허락
func textFieldShouldEndEditing(_ textField: UITextField) -> Bool {
print(#function)
return true
}
// 텍스트필드의 입력이 실제 끝났을때 호출 (시점)
func textFieldDidEndEditing(_ textField: UITextField) -> Bool {
print(#function)
return true
}
델리게이트 패턴은 iOS 개발에 필수 핵심 패턴이므로 오늘 배웠던 내용을 복습을 통한 반복 숙지가 필요하다.
'◽️ Programming > T I L' 카테고리의 다른 글
접근 제한자 , mutating , 클로저 , 고차함수 (0) | 2024.03.11 |
---|---|
프로퍼티 옵저버 (didSet , willSet) , 타입 캐스팅 (is , as) (0) | 2024.03.10 |
Swift (옵셔널 체이닝, Queue , Stack , Set , Overloading) (2) | 2024.03.06 |
Swift Tuple, Any, Character / mini project (0) | 2024.03.05 |
Type 오류 , Button Style 설정으로 인한 오류 해결 (0) | 2024.03.05 |