Protocols
A protocol defines a blueprint of methods, properties, and other requirements that suit a particular task or piece of functionality. The protocol can then be adopted by a class, structure, or enumeration to provide an actual implementation of those requirements. Any type that satisfies the requirements of a protocol is said to conform to that protocol.
In addition to specifying requirements that conforming types must implement, you can extend a protocol to implement some of these requirements or to implement additional functionality that conforming types can take advantage of.
프로토콜
프로토콜은 특정 작업에 적합한 methods, propertise 및 기타 요구사항을 정의하는 청사진을 정의한다. 프로토콜은 클래스, 구조체 또는 열거형을 채택하여 이러한 요구사항을 제공할 수 있도록해준다. 프로토콜의 요구사항을 만족하는 모든 타입은 프로토콜을 준수한다고 한다.
추가적으로 타입을 준수하는 특정 요구사항들은 반드시 구현해야한다. 이러한 요구사항들 구현함으로써 프로토콜을 확장시키거나 타입을 준수하는 추가적인 함수를 구현할 수 있다.
👉프로토콜에서는 메소드, 프로퍼티 등을 정의만한다! 채택한 곳에서 구현한다!!
🧐자바에서 인터페이스와 비슷한 느낌인가?!!!
프로토콜은 다음과 같이 메소드의 구현 부분 없이 선언만 한다!!
protocol SomeProtocol {
func some()
}
프로토콜 채택은 다음과 같이 한다! 콜론(:) 기호 이후에 작성한다. 부모 클래스 이름과 함께 작성해야 하면 부모 클래스 이름을 첫 번째로 적고 이후에 프로토콜을 작성!!
struct SomeStructure: SomeProtocol {
// structure definition goes here
}
class SomeClass: ParentClass, SomeProtocol {
// class definition goes here
}
프로토콜과 프로퍼티
protocol SomeProtocol {
var mustBeSettable: Int { get set }
var doesNotNeedToBeSettable: Int { get }
}
프로토콜에서 get과 set을 모두 선언했는데 클래스에서는 get만 작성하면 에러가 발생한다!!
get만 선언해도 get set둘다 구현할 수 있다!!
set할때는 let❌ var⭕️
set을 요구했기 때문에 값을 수정할 수 있어야하는데 let으로 선언하면 당연히 에러!!!!
protocol FullyNamed {
var fullName: String { get set }
}
struct Person: FullyNamed {
let fullName: String//error! error: type 'Person' does not conform to protocol 'FullyNamed'
}
var john = Person(fullName: "John Appleseed")
'Programming > iOS' 카테고리의 다른 글
[iOS]Dispatch Queue (0) | 2020.10.14 |
---|---|
[iOS]동시성 프로그래밍과 비동기 프로그래밍 (0) | 2020.10.11 |
[iOS] 팝업모달 만들기 (0) | 2020.09.22 |
[iOS] UIKit에 대해 알아보기 (0) | 2020.09.19 |
[iOS]노티피케이션센터와 노티피케이션 (0) | 2020.09.12 |