iOS/Swift

[Swift] Protocol 프로토콜 [1]

최지철 2023. 9. 1. 16:27
728x90
반응형

프로토콜 Protocol 이란?

  • 특정 역할을 하기 위한 메소드, 프로퍼티, 기타 요구사항등의 청사진

프로토콜의 사용

  • 구조체, 클래스, 열거형은 프로토콜을 채택해서 특정 기능을 실행하기 위한 프로토콜의 요구사항을 실제로 구현 할 수 있다.
  • 프로톨클은 기능을 정의하고 제시 할 뿐, 스스로 기능을 구현하는 것은 아니다 (조건만 정의)
  • 스위프트에서 프로토콜은 하나의 타입으로 사용된다.
    • 파라미터나 리턴타입으로 사용
    • 프로퍼티, 변수, 상수의 타입으로 사용
    • 배열 등 컨테이너 요소의 타입으로 사용

 

프로토콜의 형태

protocol Student{
	var name: String {get}
    	var grade: Int {get set}
        static var Number: Int {get set}
}

프로토콜의 요구사항

  • 프로퍼티와 타입 프로퍼티의 요구가능
  • 프로퍼티 요구사항은 항상 var로 선언
  • 프로퍼티를 읽기 전용 {get}, 읽고 쓰기 {get, set}로 할지 정해줘야 함
  • 타입 프로퍼티는 static 키워드를 사용해 선언
protocol example {
	mutating func examplefunc()
	func send(data: Any)
	static func sendInstantce(_ instance: Any) -> Bool
}

메소드 요구사항

  • 인스턴스 메소드 또는 타입 메소드 요구 가능
  • 메소드에서 함수 body를 제외하고 헤드부분만 작성
  • 타입 메소드는 static 키워드 사용

 

가변 메소드 요구

  • 값 타입의 인스턴스 메소드에서 자신 내부의 값을 변겨할 때 func앞에 mutating으로 선언한다
  • 가변 메소드를 요구한 프로토콜을 클래스가 구현할 때는 mutating 키워드 생략
  • 프로토콜에서 가변 메소드를 요구하지 않으면, mutating 메소드 구현 불가
protocol Name {
  var name: String { get }
  
  init(name: String)
}

class Person: Named {
  var name: String
  
  required init(name: String) {
    self.name = name
  }
}

이니셜 라이저 요구

  • 프로토콜에서는 이니셜라이저 정의 가능
  • 실패가능한 이니셜라이저도 선언 가능
  • 프로토콜이 요구한 이니셜라이져가 구현된 클래스를 상속받는 클래스에서는 required override를 모두 명시해야함
    • final 키워드를 사용한 class의 경우 상속이 되지 않기 때문에 상속 고려X -> required 필요 X
  • 프로토콜에서 특정 이니셜라이저가 필요하다고 명시하면 구현할 때, 이니셜라이저에 required 키워드를 붙여줘야함

 

프로토콜 채택

  • 구조체, 클래스, 열거형 등에서 채택가능
  • 클래스 상속도 함께 받는 경우도 가능
protocol Readable {
    func read()
}

protocol Writeable {
    func write()
}

protocol ReadWriteSpeakable: Readable, Writeable {
    func speak()
}

프로토콜의 상속

  • 프로토콜 끼리도 상속가능
  • 구현시, 상속받은 프로토콜의 요구사항 까지 모두 구현가능

 

클래스 전용 프로토콜 (Any Object)

  • 프로토콜의 상속 리스트에 Class 키워드를 추가하면, 프로토콜이 클래스 타입에만 채택할 수 있도록 제한 가능

위임을 위한 프로토콜( Delegation)

  • 클래스나 구조체가 자신의 책임을 다른 인스턴스에게 위임하는 디자인패턴
    • Dleegaiton된 기능을 제공할 수 있도록 책임을 캡슐화하는 프로토콜을 정의하는것으로 구현
    • 특정 액션에 응답 또는 해당 소스의 기본 타입을 알 필요 없이 외부 소스에서 데이터를 검색하는데 사용할 수 있다.
  • EX) 테이블뷰, 컬렉션뷰 델레게이트가 있다.

 

 

728x90
반응형