Swift는 클래스를 이용한 추상화보단 구조체와 프로토콜을 통한 프로토콜을 권장한다.
프로토콜에 대해
- 프로토콜이란, 특정 역할을 수행하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 청사진을 정의합니다.
- 구조체, 클래스, 열거형은 프로토콜을 채택할 수 있습니다.
- 프로토콜 내부에는 채택했을 시 꼭!!! 구현되어야만 하는 메서드, 프로퍼티, 이니셜라이저 등이 정의 및 제시되어 있습니다. 때문에, 프로토콜 스스로는 기능을 구현하지 않습니다.
- 프로토콜은 다른 프로토콜을 상속받을 수 있고, 또한 다중 상속도 가능합니다. 자식 프로토콜은 부모 프로토콜에 제시된 기능은 중복하여 써줄 필요 없습니다.
- 프로토콜 채택 시에는 ":"뒤에 프로토콜 이름을 작성하여 채택합니다. 클래스 상속과 같이 사용할 시에는 클래스를 먼저 상속하고 그 뒤에 ","를 이용하여 채택합니다.
- 프로토콜의 장점은, 프로토콜을 채택 받은 타입은 빠르게 기능에 대한 유추가 가능하고, 구현하는 과정에서도 프로토콜에 제시된 기능은 놓치지 않고 구현해 줄 수 있습니다.
프로토콜의 구문은,
protocol 프로토콜 {
// 정의
}
입니다.
사용의 예,
import Foundation
protocol Coordination
{
var top: String { get set }
var pants: String { get set }
init(top: String, pants: String)
func checkCoordination()
}
protocol Hair {
var hair: String { get }
func checkHairStyle()
}
struct Person: Coordination, Hair {
var top: String
var pants: String
let hair: String = "포마드"
func checkHairStyle() {
print("오늘의 헤어스타일은 \(hair)스타일")
}
func checkCoordination() {
print("상의: \(top)\n하의: \(pants)")
}
init(top: String, pants: String) {
self.top = top
self.pants = pants
}
}
let safari: Person = Person(top: "긴팔", pants: "반바지")
safari.checkHairStyle()
safari.checkCoordination()
//오늘의 헤어스타일은 포마드스타일
//상의: 긴팔
//하의: 반바지
참고 자료: https://docs.swift.org/swift-book/LanguageGuide/Protocols.html
'Swift' 카테고리의 다른 글
[Swift] Swift Concurrency와 GCD (1) | 2022.12.14 |
---|---|
[Swift] Race Condition과 Thread Safe (0) | 2022.12.12 |
[Swift] 객체지향(OOP) (0) | 2022.02.23 |
[Swift] 옵셔널 추출 (1) | 2022.02.14 |
[Swift]Swift random(), randomElement() 함수 알아보기 (0) | 2022.02.11 |