프로토콜
- 특정 기능 및 역할을 수행하기 위해 필요한 것들이 적혀있는 설명서와 동일한 개념
- 특정 역할을 수행하기 위한 메서드, 프로퍼티, 기타 요구사항 등이 적혀있는 하나의 "설명서" 다.
프로토콜 채택이란
- "이 설명서를 드릴테니, 여기 나와있는대로 구현해주세요" 라고 다른 타입(구조체,클래스,열거형)에게 전달하는 것이 가능하며, 이 행위를 프로토콜 채택이라고 한다.
- 프로토콜은 protocol이라는 키워드를 사용해 내부 블럭 안에 필요한 부분들을 정의한다. (프로퍼티, 메서드, 이니셜라이저 등 필요한 요구사항을 적는다)
protocol Talkabl {
//프로퍼티 요구
var topic : String { get set }
var language : String { get }
//메서드 요구
func talk()
//이니셜라이저 요구
init(topic: String, language: String)
}
- 프로토콜에서는 해야할 일을 정의만 하고, 구현은 프로토콜을 채택한 객체에서 이루어진다.
- 프로퍼티를 요구할 때는 반드시 var를 작성해야하며, get/set이 가능한지 명시해야한다.
프로토콜 채택 작성하는법
- (타입 이름) (타입) : (프로토콜) { 정의하는 부분 }
struct Person : Talkable
{
//정의
}
- 해당 타입에 특정 프로토콜을 채택하게 되면 "반드시" 해당 프로토콜에 적힌 요구사항들을 구현해야한다. (프로토콜에 있는 부분은 모두 구현해야한다.)
- 프로토콜 채택은 동시에 여러개 가능
protocol Readable {
func read()
}
protocol Writeable {
func write()
}
protocol ReadSpeakable: Readable {
func speak()
}
protocol ReadWriteSpeakable: Readable, Writeable {
func speak()
}
- 클래스에서 상속과 채택을 동시에 하려면 상속받으려는 클래스를 먼저 적고, 그 이후에 채택하려는 프로토콜 작성하면 된다.
class SuperClass: Readable {
func read() {}
}
class SubClass: SuperClass, Writeable, ReadSpeakable {
func write() {}
func speak() {}
}
Delegate Pattern
Delegate의 뜻은 "위임하다: 어떤 일을 책임 지워 맡기다", 할 일을 분배해서 다른사람에게 해당 일에 "위임" 시킨 후 해당 일이 들어오면 그 일을 맡은 사람이 한다는것!
[예를 들어
커피, 에이드, 티 3종류만 파는 카페가 있습니다.
사장은 혼자서 커피, 에이드, 티를 다 만들 수 있지만,
그것보다는 각각 종류를 담당할 다른 직원를 구해서
해당 메뉴 주문이 들어오면 그 담당 직원에게 맡기는 것이 더 효율적일겁니다.
그래서, 종류 별 일할 직원을 구해야하는데 아무나 오면 안될겁니다.
"현재 해당 종류를 만들 수 있는 사람" 이라는 조건을 걸어 사람을 구해야합니다.
여기서 "현재 해당 종류를 만들 수 있는 사람" 이라는 조건을 Protocol이라고 합니다. ]
- Delegate Pattern은 쉽게 말해 객체지향 프로그래밍에서 하나의 객체가 모든 일을 처리하는 것이 아니라, 처리 해야 하는 일 중 일부를 다른 객체에 넘기는 것이다.
- 주로 프레임워크 객체가 위임을 요청하며, 커스텀 컨트롤러 객체가 위임을 받아 특정 이벤트에 대한 기능을 구현한다.
- 커스턴 컨트롤러에서 세부 동작을 구현함으로써 동일한 동작에 대해 다양한 대응을 할 수 있게 해준다.
- Foundation, UIKit 그리고 Cocoa Touch 등 애플의 프레임워크에서 광범위 하게 활용된다.
'iOS > Swift' 카테고리의 다른 글
[iOS] WirdCard Pattern, 와일드카드 패턴 (1) | 2021.11.14 |
---|---|
[iOS]클로저 Closure (0) | 2021.11.07 |
[iOS] Struct와 Class (0) | 2021.10.23 |
[iOS] @IBOutlet과 @IBAction (0) | 2021.10.16 |
[iOS] Life Cycle (0) | 2021.10.16 |
댓글