inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지

활용-2 앱 / 코드 설정하기 (활용 앱14강)

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

313

ios개발자

작성한 질문수 8

0


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

왜 동작을 하게 되는 거죠?

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

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

 

ios swift

답변 1

1

앨런(Allen)

네 듀듀 님! 안녕하세요!

아마 뒤에 강의에서 다른 델리게이트 패턴을 직접 구현한 코드를 뜯어서 보는 부분의 강의까지 보시면 더 이해가 되시긴 할텐데.. (뒤에 강의에서 제가 다시 뜯어서 설명드립니다.)
간략하게 말씀드리면..

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

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

 

감사합니다. :)

 

2

ios개발자

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

수강연장부탁드려도될까요..

0

43

2

Drawing Cycle 관련 질문

0

72

1

앱 제작 시 주로 코드로 작성하시는 이유가 있을까요?

0

97

2

델리게이트 패턴 관련 질문

0

68

2

수강 기간 연장 부탁드릴 수 있을까요?

0

65

1

활용 앱 57강 질문입니다.

0

55

1

활용 앱 30강 에러 질문입니다

0

64

2

기초앱 17강 Contraints 설정 질문입니다.

0

67

2

기초 앱 4강 Type Any -> UIButton

0

68

2

34강 유용한 앱 추천에 나오는 UIKitViewer에 대해서 질문이 있습니다

0

80

1

깃에 코드는 올려도 된다고 하셨는데

0

111

1

수강기간 연장신청 드려도 될까요?

0

84

1

수강 기간 연장 부탁드려도 될까요?

0

120

2

수강 기간 연장 신청 요청드립니다.

0

131

2

playground에서 상단 실행?아이콘 회전 관련하여...

0

137

1

활용앱53강에서 질문있습니다.

0

166

2

Project 명칭 변경방법이 궁금합니다.

0

140

1

override 에 대해서 궁금한 것이 있습니다.

0

125

2

섹션8] 코드 리팩토링 문의

0

100

1

xcode 에서 ios 버전 선택 및 시뮬레이터 관련 질문

0

570

2

수강 기간 연장 부탁드려도 될까요?

0

132

2

뷰모델의 상태변화 와 didSet

0

98

1

@Sendable 키워드

0

95

1

클로저

0

107

2