Programming/iOS

[iOS] 프로토콜

lingk 2020. 9. 17. 22:01

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")

 

 

https://docs.swift.org/swift-book/LanguageGuide/Protocols.html#//apple_ref/doc/uid/TP40014097-CH25-ID267

 

Protocols — The Swift Programming Language (Swift 5.3)

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 tho

docs.swift.org

 

반응형