제목에서 보는 모든 것들은 이벤트 처리관련 용어들 이에요
모두 이벤트를 처리해주지만 사용 방법이나 쓰이는 용도가 조금 달라요
'별 차이 없는데 아무거나 쓰지 뭐' 라는 생각을 할 수 있는데
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 패턴입니다!!!
다음 글에서 Notification 이벤트에 관련된 개념들을 다뤄볼게요😄😄
2020/03/09 - [iyOmSd/Title: iOS Think🤔] - Swift Event - Delegate, Notification, KVO란? (2/3)
'iyOmSd > Title: iOS Think🤔' 카테고리의 다른 글
[iOS] initialization 생성자 (0) | 2020.08.13 |
---|---|
[iOS] Swift Memory - COW (Copy On Write) (0) | 2020.08.03 |
[iOS] Swift Event - Delegate, Notification, KVO란? (3/3) (0) | 2020.03.28 |
[iOS] Swift Event - Delegate, Notification, KVO란? (2/3) (0) | 2020.03.09 |
[iOS] Swift Thread - Dispatch Queue, Operation Queue (0) | 2019.12.21 |