아리의 iOS 탐구생활

[Swift] Protocol 1) 기본 개념 본문

Swift/문법

[Swift] Protocol 1) 기본 개념

Ari Lee 2021. 8. 18. 17:52
반응형
프로토콜(Protocol)은 
최소한으로 가져야할 속성이나 메서드를 정의해줄 수 있다.
구현은 하지않고 정의만 하는게 특징이다.

 

 

 

 

프로토콜을 적용하면 프로토콜에서 정의한 속성과 메서드를 모두 구현해야 한다.

하나의 타입으로 사용되기 때문에 아래와 같이 타입 사용이 허용되는 모든 곳에 프로토콜을 사용할 수 있다.

 

  • 함수, 메소드, 이니셜라이저의 파라미터 타입 혹은 리턴 타입
  • 상수, 변수, 프로퍼티의 타입
  • 배열, 딕셔너리의 원소타입

 

🔍  기본형태

protocol name {
    // 프로토콜 정의

}

 

구조체, 클래스, 열거형 등에서 프로토콜을 채택하려면 타입 이름 뒤에 콜론”:”을 붙여준 후 채택할 프로토콜 이름을 쉼표”,”로 구분하여 명시해준다. SubClass의 경우 SuperClass를 가장 앞에 명시한다.

struct SomeStruct: AProtocol, AnotherProtocol {
 // 구조체 정의
}
// 상속받는 클래스의 프로토콜 채택
class SomeClass: SuperClass, AProtocol, AnotherProtocol {
 // 클래스 정의
}

 

 

프로토콜을 생성할때 AnyObject를 상속하게되면 클래스 전용 프로토콜로 정의해줄 수 있다.

구조체나 열거형에서는 채택할 수 없는 프로토콜이 된다.

🔍  예제

protocol Protocols { // Upper Camel Case
    // property Requirements
    // method Requirements
    // initializer Requirements
    // subscript Requirements
}

protocol Name: Protocols {
    // 프로토콜은 상속을 지원한다. 클래스와 문법은 동일하다.
    // 클래스와 다르게 다중상속을 지원한다.
}

protocol Test {
    func say()
}

struct A: Test {
    func say() {
        // 구현부는 자유롭게 작성할 수 있다.
        print("난 말할 수 있다!!!")
    }
}

protocol OnlyClass: AnyObject, Test {
    // 클래스 전용 프로토콜로 선언된다.
    // 구조체나 열거형에서는 채택할 수 없다.
}

//struct Value: OnlyClass {
//    // error: non-class type 'Value' cannot conform to class protocol 'OnlyClass'
//}
class Reference: OnlyClass {
    // OnlyClass 프로토콜은 AnyObject외에 Test 프로토콜도 상속받고 있다.
    func say() { // 그래서 Test의 정의되어있는 메서드 구현이 필요하다
        print("난 클래스야, 참조타입임!!!")
    }
}

 

 

🔍  Delegate란?

사전상 의미로위임하다라는 뜻인데, 사전 그대로 원하는 class, enum, struct 프로토콜을 채택하여 위임하는 것을 뜻한다.

 

 

 

 

 

 

✔️  Reference

 

Protocols — The Swift Programming Language (Swift 5.5)

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

 

반응형
Comments