델리게이트 패턴 , 텍스트 필드

델리게이트 패턴은 객체 지향 프로그래밍에서 자주 사용되는 디자인 패턴 중 하나이다.

  • 하나의 객체가 다른 객체의 동작을 직접 구현할 필요가 없을때
  • 객체 간의 결합도를 낮추고 유연성을 높이고자 할 때
  • 이벤트 처리, 데이터 소스 및 테이블 뷰와 같은 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 개발에 필수 핵심 패턴이므로 오늘 배웠던 내용을 복습을 통한 반복 숙지가 필요하다.