일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 개발기록
- FileOwner
- MainScheduler
- Xib
- Xcode
- 스프링
- iOS앱배포
- 맥
- Python
- Swift
- 앱버전구하기
- 웹
- 딩동말씀
- 파이썬서버
- 자바스크립트
- 계산기앱만들기
- 앱배포
- subscript
- ios
- 스위프트
- 계산기앱
- iOS배포
- iOS계산기
- FLASK
- spring
- DispatchGroup
- JavaScript
- customclass
- AJAX
- jQuery
- Today
- Total
개발하는 뚝딱이
[iOS] 델리게이트 Delegate 본문
델리게이트
델리게이트는 클래스나 구조체와 같은 어떤 객체가 다른 객체에게 자신의 일을 위임하는 디자인 패턴입니다. 이 때 일을 처리하라고 위임하는 객체를 'A'라고 하고 일을 위임받은 객체를 'B'라고 합시다. A는 B를 계속 참조하고 있다가 적절한 때에 이제 처리할 이벤트나 방금 처리 끝낸 이벤트를 B에게 알리는 역할입니다. B는 자신이나 다른 객체의 상태를 업데이트하여 메시지로 응답하며, 때로는 이벤트가 어떻게 처리되는지와 관련있는 값을 반환합니다. 델리게이션는 사용자가 쉽게 한 객체에 따라 다른 객체들을 손쉽게 다루기 위해서 중요합니다.
델리게이션과 프로토콜
프로토콜은 하나의 완전한 타입으로 여러 위치에서 사용됩니다. 그러나 정의를 하고 제시만 할 뿐이지 구현은 하지 않습니다. 프로토콜을 채택한 타입에서 구현해야 합니다. 프로토콜은 콜론(:) 뒤에 추가하여 채택합니다. iOS 개발 시 사용되는 ~Delegate 또한 프로토콜 타입입니다. 따라서 프로토콜을 채택하였을 때 프로토콜에서 요구하는 것을 '준수해야'합니다.
델리게이션과 코코아 프레임워크
위임하는 객체, A는 일반적으로 프레임워크 객체이며 위임받은 객체 B는 컨트롤러 객체입니다. 메모리 관리 환경에서, A는 B에 대해 약한 참조를 하고 있고, 가비지 컬렉션GC 환경에서는 강한 참조를 하고 있습니다. Foundation, UIKit, AppKit, Cocoa, Cocoa Touch 프레임워크에서는 많은 델리게이션 예가 있습니다.
아래 예시의 위임하는 객체는 AppKit 프레임워크의 NSWindow class 인스턴스입니다. 사용자가 윈도우의 창닫기를 눌렀을 때, 윈도우 객체는 NSWindowDelegate 프로토콜을 통하여 windowShouldClose: 메소드로 윈도우창을 닫았는지 확인 요청합니다. 위임받은 객체는 Boolean 타입으로 값을 반환하여 줍니다.
데이터소스
어떤 객체가 다른 객체의 데이터소스로 선언이 되면, 선언한 객체가 데이터를 필요할 때 지정된 메소드를 통해 데이터를 넘겨주는 역할을 합니다.
'iOS' 카테고리의 다른 글
[iOS] 뷰 컨트롤러 (0) | 2020.05.13 |
---|---|
[ios/xcode] xcode에서 위치 사용하기 (0) | 2020.04.17 |
[iOS] View Programming 뷰 프로그래밍 (0) | 2020.03.19 |
[iOS] 네비게이션 컨트롤러 Navigation Controller (0) | 2020.03.19 |
[iOS] 앱 시닝(app thinning) (0) | 2020.02.15 |