[Swift] Delegate 패턴 정리

seokhoho·2023년 12월 20일
0

swift

목록 보기
5/5

Delegate

Delegate는 위임하다, 대리자라는 뜻을 가지고 있다.

객체 지향 프로그래밍에서 델리게이트 패턴은 하나의 객체가 모든 일을 처리하는 것이 아니라
처리해야 할 일 중 일부를 다른 객체에게 위임 한다는 것이다.

객체지향 4대특성

  • 캡슐화
  • 상속성
  • 추상화
  • 다형성

장점

  • 프로토콜 사용으로 재사용성이 뛰어남
  • 프로토콜에 필요한 메소드들이 명확하게 명시되어 정보 전달도 가능
  • 객체 지향 프로그래밍을 따름
  • 로직의 흐름을 따라가기 쉽다

단점

  • 많은 줄의 코드가 필요하다
  • delegate 설정에 nil이 들어가지 않게 주의해야한다.
  • 많은 객체들에게 이벤트를 알려주는 것이 어렵고 비효율적이다.

예제

Swift에 구현된 Delegate 프로토콜
(UITextFieldDelegate, UITableViewDelegate, UIWebViewDelegate 등등)

1. 프로토콜 채택하기

사용할 ViewController에 UITextFieldDelegate를 채택을 한 후
현재 ViewController를 대리자로 설정한다.

textField.delegate = self

self는 현재 ViewController의 객체를 말한다

textField의 대리자(Delegate)는 ViewController의 객체가 된다는 말이다.

class ViewController: UIViewController, UITextFieldDelegate {

	let textField = UITextField()
    
    override func viewDidLoad() {
    	super.viewDidLoad()
        
        self.textField.delegate = self
   	}
}

2. 메서드 구현하기

Swift에서 기본 구현되어 있는 Delegate프로토콜들은 많은 메서드가 존재한다
UITextFieldDelegate 공식문서

애플에서 잘 만들어 놓은 메서드들을 우리는 목적에 맞게 선택하여 선택하면 된다.

메서드를 재정의 해준다

// 지정된 텍스트 필드에 대한 편집이 중지된 시점과 중지된 이유를 델리게이트에게 알려줍니다.
func textFieldDidEndEditing(_ textField: UITextField) {
	textField.text = "END"
}
// 델리게이트에게 텍스트 필드의 리턴 버튼 누름을 처리할지 여부를 묻습니다.
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
	textField.resignFirstResponder()
}

실제 UITextField의 동작이지만 ViewController가 메서드를 전달받아 대신 작업한다.

화면에서 유저와 UITextField가 소통을 하면
UITextField의 동작은 Delegate를 통해서 ViewController에 전달받아 수행한다.
쌍방향 의사소통의 개념






> 몇가지를 보고 작성해보았지만 Delegate에 대한 이해가 쉽게 되지는 않는다 좀 더 찾아봐야겠다.

[참고]
https://ios-daniel-yang.tistory.com/18

profile
iOS 코린이

0개의 댓글