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
  • 타입에 기능을 추가하기 위해 사용하는 문법
  • 새로운 클래스를 만들면서 기능을 확장하는 상속과 달리 수평적 확장
  • 프로퍼티는 연산 프로퍼티만 가능

댓글남기기