일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- IOS
- UIKit
- Method
- Git
- interpace
- init
- 디자인패턴
- property
- extension
- instance
- Protocol
- delegate
- Unicode
- Foundation
- Swift
- tuist
- Xcode
- Terminal
- Class
- initializer
- String
- struct
- 이니셜라이저
- initalizer
- url
- optional
- type
- enum
- 코딩테스트
- 스위프트
Archives
- Today
- Total
아리의 iOS 탐구생활
[Swift] Protocol 1) 기본 개념 본문
반응형
프로토콜(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
반응형
'Swift > 문법' 카테고리의 다른 글
[Swift] Protocol 3) 메소드의 대한 요구사항 (0) | 2021.08.18 |
---|---|
[Swift] Protocol 2) 속성(Property)의 대한 요구사항 (0) | 2021.08.18 |
[Swift] 이니셜라이저(initalizer) / 참조타입에서의 사용 [3] (0) | 2021.08.15 |
[Swift] 이니셜라이저(initalizer) / 값타입에서의 사용 [2] (0) | 2021.08.14 |
[Swift] 이니셜라이저(initalizer) / 기본 개념 [1] (0) | 2021.08.13 |
Comments