• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    미해결

활용-2 앱 / 코드설정하기 (활용 앱 14강) 델리게이트 부분에 궁금한게 있습니다.

23.10.24 22:49 작성 조회수 184

0


여기서 보면 textField 라는 함수를 생성만 해놓았는데?

왜 동작을 하게 되는 거죠?

그러니까 함수를 호출해야 동작하는 거 아닌가요?

함수를 호출하는 역할을 하게 되는게 textfield를 누르거나 글자나 숫자를 입력하거나 하는 행동이 호출하게 되는 건가요?

 

  • 유사한 질문이 있었는데.. 이해를 못했어요

     

답변 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(...) 함수만 구현해도 그 동작이 전달되는 것입니다.

혹시나 이 부분이 이해가 잘 안되시면, 다시 그림을 그려서 설명드릴 수도 있으나, 일단 뒤에 강의까지 보시고.. 다시 질문 부탁드립니다.

 

감사합니다. :)

 

듀듀님의 프로필

듀듀

질문자

2023.10.25

친절한 답변 감사합니다. !