ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Swift - Delegate 정리
    Swift 2019. 7. 14. 19:27

     

     

     

    Delegate 는 대리자(위임하다) 라는 뜻이며,

    어떤 객체에서 일어나는 모든 일 (이벤트)을 하나의 객체가 처리하지않고 처리해야하는 일 중 일부를

    다른 객체에서 처리(작성)해주는 것을 말한다.

     

     A의 일을 B가 대신 해주는 것 이며, 이러한 행위에는 당연히 처리해야하는 일인  '해야하는 일의 목록' 을 동반한다.

     

    • sender : 일을 시키는 객체 (A)

    • receiver : 일을 하는 객체 (B)

    • protocol : 해야할 일의 목록 (동반하는것)

     

    말로만 들으면 잘 모르겠다. 

    내가 듣고 이해한 것을 그림으로 표현해서 다시 말하고자한다. 

     


    1.   Protocol : 해야할 일의 목록 

     

     

     

    여기 프로토콜인 선생님이 있다.

    선생님은 숙제 검사를하다() , 가르치다(), 칭찬하다() 로 이루어져 있다.

     

    만약 내가 사회선생님, 수학선생님, 영어선생님을 만들고자 할 때,  내가 처음부터 다시 다 만들어야 할까?

    굳이 그럴필요가 없다! 왜냐하면 이미 선생님이라는 프로토콜이 있으니까. 가져와서 쓰면된다.

     

    그런데 이때, 모든 선생님들이 모두 똑같이 가르칠까? 그것은 아니다. 

    각자의 가르치는 행위 안에서는 분명 다른 차이점이 있을 것이다.

     

    그래서 프로토콜에서의 가르치다를 가져오지만 그 가르치다() 안에서의 각각의 차이가 있는 것에 대해서

    내가 사회선생님에서는 이렇게 할거야 라는 내용A를 적어주면 되는것이고,

    수학선생님에서는 다르게 이렇게 할거야 라는 내용B를

    영어선생님에서는 또 다르게 이렇게 할거야 라는 내용인 C를 정리해주면 되는 것이다.

     

     

     

    예를 들어 프로토콜 UITextFieldDelegate 에는 텍스트 필드가 수정 시작될때, 수정이 중지 될때 등 여러가지가 있다.

     

     

     

    2.   Sender 와 Receiver / 일을 시키는 객체와 일을 하는 객체

    그러면 프로토콜 UITextFieldDelegate  중에 하나를 이용하여 sender 와 receiver 을 정해보자.

    예를 들어 텍스트필드에 글을 적고 리턴버튼을 클릭하면 키보드가 내려가라!

    라고 하고 싶다면

     

    프로토콜 UITextFieldDelegate 에 이미 만들어져 있는 리턴버튼 클릭을 가져와서,

    그 안에 내가 하고싶은 코드인 수정이 중지되면 키보드를 내려라. 라고 작성 하면 된다.

     

    그러면 여기서 누가 sender(일을 시키는 객체) 이고 누가 receiver (일을 하는 객체) 인가?

     

    텍스트필드가 일을 시키는 객체 즉 sender 이며,  - (나 작성 끝났으니까 키보드 내려!)

    키보드를 올리고 내리고 하는 viewController가 일을 하는 객체 즉 Receiver 이다.  -  (ㅇㅋ 키보드 내릴게)

     

    키보드가 해야할 일을 뷰컨트롤러가 대신 해주는 이것,

    이것이 Delegate (대리자, 위임하다) 이다. 

     

     

     

     

     

    -

    * 본 글은 글쓴이가 스터디를 하고 배운 내용을 정리하는 식으로 쓰여지기 때문에 완전 초보자의 글입니다. 
    틀린 부분이 있을 수도 있고 글의 흐름이 일정하지 않을 수 있습니다.*

    -

     

     

    댓글

Designed by Tistory.