Protocol(interface?)
TIL(Today I Learned)
Protocol이란?
코틀린 공부를 할때는 interface를 사용했었는데 swift에서는 interface가 없습니다. 대신 protocol이 등장했습니다.
상속과 프로토콜… 프로토콜과 상속… 프로토콜은 언제 사용하고 어떻게 사용하는건지 확실히 짚고 넘어가야 할 것 같은 생각이 들었습니다.
protocol?
- 특정 역할을 하기 위한 메소드, 프로퍼티, 기타 요구사항 등의 청사진
protocol의 사용
- 구조체, 클래스, 열거형이 프로토콜을 채택하여 프로토콜의 요구사항을 실제로 구현 가능
- 프로토콜은 정의만 가능하고 기능을 구현하지는 x
- 하나의 타입으로 사용되기 떄문에 타입 사용이 허용되는 모든 곳에 프로토콜 사용 가능
- 기본 형태
protocol 프로토콜이름 { // 프로토콜 정의 } - 채택 방법 ```swift struct SomeStruct: AProtocol, AnotherProtocol { // 구조체 정의 }
class SomeCalss: SuperClass, AProtocol, AnotherProtocol { // 클래스 정의 } ```
Property Requirments
- 프로퍼티가 저장 프로퍼티인지 연산 프로퍼티인지 명시하지 x
- 이름 / 타입 / gettable / settable
- 항상 변수(var)로 선언
Method Requirements
- 메소드 파라미터의 기본 값은 프로토콜 안에서 사용할 수 x
- 함수명과 반환값만 지정
- mutating 키워드 - 인스턴스에서 변경 가능하다는 것을 표시(value type에서만 사용 가능)
Initializer Requirements
- 실패 가능한 이니셜라이저도 선언 가능
- required 키워드 - 특정 이니셜라이저가 필요하가도 명시
Extension
- 타입에 기능을 추가하기 위해 사용하는 문법
- 새로운 클래스를 만들면서 기능을 확장하는 상속과 달리 수평적 확장
- 프로퍼티는 연산 프로퍼티만 가능
댓글남기기