적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

Swift iOS 앱 개발/Swift

[Swift] protocol 프로토콜이란?

hongssup_ 2023. 1. 3. 11:52
반응형
프로토콜이란 어떤 기능을 구현하기 위해 필요한 것들을 모아놓은 약속이라고 할 수 있다.
프로토콜에서는 해당 기능을 구현하기 위해 사용되어야 할 변수 / 메서드의 선언만 가능하며 로직을 넣을 수는 없다. 
프로토콜에서 내부 기능까지 구현을 하고 싶다면 extension 으로 로직을 구현해 프로토콜을 확장하여 사용할 수도 있다. 
또한 프로토콜을 채택하는 곳에서 generic 타입을 이용하고 싶다면 associatedtype 키워드를 사용하여 선언을해 줄 수 있다. 
+ 이렇게 프롤토콜을 활용하면 class 뿐 아니라 상속이 되지 않는 enum, struct 에서도 공통 기능을 모듈화하여 사용할 수 있다는 장점

 

Protocol 이란? 

- 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.

- 프로토콜은 특정 작업이나 기능에 필요한 메서드, 프로퍼티 등의 요구사항들을 정의한다.  

- 프로토콜은 이러한 요구사항을 실제로 구현하기 위해 class, struct, enum에 의해 채택될 수 있으며,

프로토콜의 요구사항을 충족하는 타입은 해당 프로토콜을 준수한다고 한다. 

- 또한 프로토콜을 준수하는 타입에서 구현해야 하는 요구사항들을 구체화하거나 추가 기능을 구현하고 싶을 때에는 프로토콜을 확장해서 사용할 수도 있다. 

 

 

 

클래스의 상속과 비슷. 

객체지향 프로그래밍에서는 class 에서만 상속이 가능. 

프롤토콜을 활용하면 

상속이 되지 않는 struct 에서도 공통 기능을 가질 수 있음. 

 

프로토콜 : 정의만 (변수/메서드 선언만)

구현은 사용할 때. 

Protocol methods must not have bodies

로직을 넣을 수는 없음. 

 

extension을 활용하면 로직을 넣을 수도 있음. 

 

protocol associated type 

generic 형태로 뭔가를 가질 수 있다. 

protocol에서 associatedtype 을 사용하면 generic 형태를 가질 수 있다.  

해당 프로토콜을 채택하는 데이터 타입이 제네릭 타입을 이용할 경우 associatedtype 키워드를 사용.

728x90
반응형