iyOmSd/Title: iOS Think🤔

[iOS] Swift Event - Delegate, Notification, KVO란? (1/3)

냄수 2020. 2. 25. 12:45
반응형

제목에서 보는 모든 것들은 이벤트 처리관련 용어들 이에요

모두 이벤트를 처리해주지만 사용 방법이나 쓰이는 용도가 조금 달라요

 

'별 차이 없는데 아무거나 쓰지 뭐' 라는 생각을 할 수 있는데

iOS를 알아가는데 중요한 개념들 이라고 생각해요

아직도 명확하게 구분지어서 설명 할 수 없을 것 같아요

 

Delegate

Swift좀 하셨다면 Delegate란 단어를 많이 들어 봤을거에요

 

위임자, 대리자 라는 뜻이 나오죠??

이단어만 듣고는 정확히 어떤 느낌인지는 헷갈려요 

대신해주는거구나 라는 느낌이지만 어떻게? 무엇을? 대신해주는지는 잘 감이안와요

 

흔히 쓰는 Delegate를 보면

TableViewDelegate, CollectionViewDelegate, 등 써본적이 있을거에요

이렇게만 놓고보면 아 TableView의 이벤트처리를 대신해주는구나

CollectionView의 이벤트처리를 대신해주는구나 라는 느낌을 받아요

 

 

그렇다면 위와 같이 기본으로 주어지는 Delegate만 이벤트를 대신 처리해줄 수 있는건가요??

- 아닙니다!!

Delegate패턴을 적용한 이벤트 처리방식 중 일부라고 말할 수 있을 것 같아요

 

 

저희도 Delegate패턴을 적용해서 저렇게 만들 수 있어요!!

 

Delegate패턴에 대해 더 자세히 알아볼까요?

 

  • 위임자, 대리자
  • 대신 처리 해줄 객체와 처리하라고 시키는 객체로 구분
  • 어떤 객체가 해야 하는 일을 부분적으로 확장해서 대신 처리
  • Protocol로 정의하여 사용
  • 엄격한 Syntax로 필요한 메소드들이 명확하게 명시
  • 제3의 객체 (예: Notification Center 객체)가 필요없음
  • nil 주의
  • 많은 줄의 코드가 추가
  • 많은 객체들에게 이벤트 알리는 것이 비효율적

위와같은 특징을 가지고 있어요

 

 

실제로 사용할때는 어떻게 쓰는지 간단하게 구현해 볼께요

 

먼저 만들고자하는 Delegate를 프로토콜을 선언해 줍니다

protocol TestDelegate {
    func textChange(text: String)
}

 

textChange라는 함수가 실행되면 이 Delegate를 채택한 ViewController의 라벨을 바꿀거에요

 

 

위처럼 첫번째 화면을 구현 했어요

앞서 만든 TestDelegate를 채택하고 해당함수가 실행되면

다른 ViewController에서 전달받은 text로 Label을 바꿀수 잇도록 했습니다.

 

nextVC.delegate = self 는 이제부터 설명할게요!!

 

다음화면에 TestDelegate 프로토콜 자료형인  delegate 변수를 선언해 두고 

다음화면으로 넘어오기 전에

nextVC.delegate = self 를 통해서 변수에 값을 채워 줍니다!!!

 

전화면이 A,  다음화면이 B 라고 했을때

A와 B는 서로 ViewController 객체에요

 

A는 TestDelegate를 채택하고 있으니까 B의 delegate 자료형과 맞기때문에

delegate에 A 객체가 들어갈 수 있어요!!

 

그렇다면 delegate는 A객체를 참조하고있으니까

delegate.textChange를 호출한다면

A객체에 있는 textChange를 호출 하는 거에요!!!

 

정리하자면

B에서 

delegate.textChange(text: "두번째 화면에서 보낸 텍스트") 를 입력하면

여기서 text가 A의 매개변수로 들어오고 textChange 함수가 실행되요

이러한 방법으로 이벤트를 처리하는 방식이 Delegate 패턴입니다!!!

왼쪽: delegate채택한, 가운데: delegate 함수실행, 오른쪽: delegate채택한 처음화면

 

 

 

다음 글에서 Notification 이벤트에 관련된 개념들을 다뤄볼게요😄😄

2020/03/09 - [iyOmSd/Title: iOS Think🤔] - Swift Event - Delegate, Notification, KVO란? (2/3)

 

Swift Event - Delegate, Notification, KVO란? (2/3)

이전 글에서는 2020/02/25 - [iyOmSd/Title: iOS Think🤔] - Swift Event - Delegate, Notification, KVO란? (1/3) Swift Event - Delegate, Notification, KVO란? (1/3) 제목에서 보는 모든 것들은 이벤트 처리관..

nsios.tistory.com

 

반응형