안녕하세요. narvis2 입니다.
이번시간에는 Swift
문법에 중에서도 Protocol
에 대하여 알아보는 시간을 가지도록 하겠습니다.
🍀 Protocol
- Kotlin 의
interface
와 비슷합니다. - 특정 작업 또는 기능에 적합한 메서드, 속성 및 기타 요구 사항의
Blueprint
를 정의한다 Protocol
👉 요구사항Protocol
에는 구현 내용은 들어가 있지 않고, 채용한 타입이 직접 구현Protocol
을 채용한 형식은요구사항
을 반드시 모두 구현Protocol
은Protocol
간 상속을 지원,class
와 달리 다중 상속 도 지원- ℹ️ 사용 이유
swift
는protocol
지향 프로그래밍임protocol
초기 구현이protocol
지향 프로그래밍의 핵심swift
에서는class
만상속
이 가능하고class
는참조 타입
이므로 참조 추적에 비용이 많이 발생- 따라서 비교적 비용이 적은
값 타입
을 활용하고 싶어도, 상속을 할 수 없으므로 때마다 기능을 다시 구현해 주어야 한다는 불편함이 있음
- 따라서 비교적 비용이 적은
protocol
을 사용하면상속
이라는 한계점을 탈피할 수 있음- 초기에 구현해 놓은 많은
property
나method
를 우리가 쉽게 채택하여서 사용을 할 수 있다는 큰 장점이 있음
- 초기에 구현해 놓은 많은
☘️ Protocol property
Protocol
에서property(속성)
를 정의할 때에는get
과set
키워드를 사용해property(속성)
가읽기 전용 property(속성)
인지쓰기 property(속성)
인지를 반드시 명시 를 해줘야 함- {get, set} 👉 읽기 / 쓰기
property
- { get } 👉 읽기 전용
property
- {get, set} 👉 읽기 / 쓰기
예제 👇
1
2
3
4
protocol SomeProtocol {
var mustBeSettable: Int { get set }
var doesNotNeedToBeSettable: Int { get }
}
☘️ Protocol method
method
의 본문은 포함하지 않음
예제 👇
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
protocol RandomNumberGenerator {
func random() -> Double
}
class LinearCongruentialGenerator: RandomNumberGenerator {
var lastRandom = 42.0
let m = 139968.0
let a = 3877.0
let c = 29573.0
func random() -> Double {
lastRandom = ((lastRandom * a + c)
.truncatingRemainder(dividingBy:m))
return lastRandom / m
}
}