작성
·
268
답변 1
1
네 듀듀 님! 안녕하세요!
아마 뒤에 강의에서 다른 델리게이트 패턴을 직접 구현한 코드를 뜯어서 보는 부분의 강의까지 보시면 더 이해가 되시긴 할텐데.. (뒤에 강의에서 제가 다시 뜯어서 설명드립니다.)
간략하게 말씀드리면..
실제로 동작은 UITextField에서 일어납니다.
그리고 아래 예시처럼 텍스트필드 내부에는...
아래와 같은 (대략적인) 함수들이 구현되어 있고, (아래와 같은 실제 내부 구현은 가려져 있습니다.)
class UITextField {
var delegate: UITextFieldDelegate?
func 유저가텍스트필드터치를시작함() {
// 델리게이트의 터치 시작 메서드 호출
delegate.textField(...)
}
func 유저가글자를입력함() {
// 델리게이트의 글자 입력 메서드 호출
delegate.textField(...)
}
func 유저가버튼을누름() {
// 델리게이트의 버튼 누름 메서드 호출
delegate.textField(...)
}
//......
}
그러면 유저가 텍스트필드 터치를 시작하면 ---> 운영체제는 텍스트필드의 터치를 인지하고 아래의 함수를 호출합니다.
유저가텍스트필드터치를시작함()
(애플의 운영체제 관련 부분이기 때문에 이 부분에 대한 구현도 우리는 알 수 없음. 다만, 추상적으로 인지만 가능)
그러면 실제로 어떤 일이 일어날까요? "유저가텍스트필드터치를시작함" 함수 내부에 구현되어 있는 아래의 함수를 호출하는 것이고 (이 부분도 애플이 구현을 가려놓음)
delegate.textField(...)
우리는
텍스트필드.delegate = 뷰컨트롤러자신
이라고 설정했기 때문에 실제로
뷰컨트롤러자신.textField(...)
이라고... 뷰컨트롤러에 구현된 함수가 결국엔.. 호출이 되는 것입니다.
결론적으로
다시 한번 쉽게 보면..
class UITextField {
var 대리자: UITextFieldDelegate? = 뷰컨트롤러 자신
func 유저가텍스트필드터치를시작함() {
// 델리게이트의 터치 시작 메서드 호출
대리자.textField(...)
}
//....
}
이런 구조가 일어나기 때문에...
UITextField에서 터치가 일어남 ➞ (운영체제 인지) ➞ UITextFile가 가진 "유저가텍스트필드터치를시작함( )"함수를 호출하고 ➞ 그 함수 내부에서 "대리자.textField(...) 함수를 실행"하니까
뷰컨트롤러에서는 해당 textField(...) 함수만 구현해도 그 동작이 전달되는 것입니다.
혹시나 이 부분이 이해가 잘 안되시면, 다시 그림을 그려서 설명드릴 수도 있으나, 일단 뒤에 강의까지 보시고.. 다시 질문 부탁드립니다.
감사합니다. :)
친절한 답변 감사합니다. !