프로토콜 지향 프로그래밍(POP)이다
객체 지향 프로그래밍에서는 공통된 기능을 Class의 상속을 통해 구현한다. Swift도 많은 부분이 Class로 이루어져 있다.
참조 타입의 경우 다중 스레드 환경에서 잘못된 참조로 인해 원본 데이터에 접근해 잘못된 값으로 변경될 수 있는데 그 것을 방지하기 위해 값타입을 권장하는데
구조체 및 열거형은 상속이 불가능 한 점이 있습니다.
하지만 POP개념을 이용하면 프로토콜 + 익스텐션을 통해 껍데기 안에서 구현까지 해놈으로써 심플하게 해결이 가능한데 이러한 조합을 프로토콜 초기 구현이라한다.
프로토콜 + 익스텐션의 조합으로 만든 소스
protocol Person {
var name: String { get }
var age: Int { get }
func getAge() -> Int
}
// 프로토콜 초기구현
extension Person {
func getAge() -> Int {
return self.age
}
}
struct FireFighter: Person {
var name: String
var age: Int
func extinguish() {
}
}
struct PolieMan: Person {
var name: String
var age: Int
var jail: [Criminal] = []
mutating func arrest(criminal: Criminal) {
jail.append(criminal)
}
}
protocol Box {
// 연관값으로 선언
associatedtype Item
var items: [Item] { get set }
mutating func addItem(item: Item)
}
extension Box {
mutating func addItem(item: Item) {
items.append(item)
}
}
// 제네릭으로 선언
struct StructBox<Element>: Box {
typealias Item = Element
var items: [Element]
}
let intBox: StructBox<Int> = StructBox(items: [0, 1])
let stringBox: StructBox<String> = StructBox(items: ["Alpaca", "Cattle"])
제네릭 부분은 차후 pop연계되는 제네릭 게시글에서 별도로 다루고 이해해 보는걸루ㅠㅠ
참고링크 : https://duwjdtn11.tistory.com/618
https://medium.com/@Alpaca_iOSStudy/protocol-oriented-programming-pop-2db7d4d02747