프로토콜
프로토콜은 특정 역할을 하기 위한 메소드, 프로퍼티, 기타 요구사항을 정의해 놓은 "규약" 혹은 "약속"으로 class, structure, enum이 프로토콜을 채택해서 특정 기능을 실행하기 위한 프로토콜의 요구사항을 실제로 구현할 수 있다.
프로토콜은 설계된 조건만 정의를 하고 제시를 할 뿐, 스스로 기능을 구현할 수 없다. 또한 프로토콜에서는 이름과 타입, 그리고 getteable, setteable 을 명시하고 프로퍼티를 선언할 때는 변수만 선언이 가능하다.(var 만 선언이 가능하다.) 또한 메소드를 정의할 때 메소드 이름과 리턴값을 지정할 수 있고, 구현 코드는 적지 않는다. 이후 class, structure, enum이 프로토콜을 '채택' 하면 모든 요구 사항을 충족해야 프로토콜을 '준수' 했다고 한다.
이렇게 보면 프로토콜은 상속과 유사하다고 볼 수도 있지만, class 이외에 structure 나 enum도 프로토콜을 채택할 수 있다는 특징이 존재한다. 또한 상속은 다중 상속이 불가능하지만, 프로토콜은 다중 상속이 가능하다.
protocol 프로토콜이름 {
// 프로토콜 정의
}
// 상속받는 클래스의 프로토콜 채택
class 클래스이름: 슈퍼클래스, 프로토콜1, 프로토콜2 {
// 클래스 정의
}
protocol Vehicle {
var speed: Double { get set } // get과 set을 모두 요구하는 가변 속성
var manufacturer: String { get } // 읽기 전용 속성
}
class Car: Vehicle {
var speed: Double = 0.0 // get과 set이 요구되는 속성을 구현
var manufacturer: String = "Toyota" // 읽기 전용 속성을 구현
}
class Bicycle: Vehicle {
var speed: Double = 0.0 // get과 set이 요구되는 속성을 구현
var manufacturer: String { return "Giant" } // 읽기 전용 속성을 연산 프로퍼티로 구현
}
let car = Car()
car.speed = 60.0 // set 가능
print(car.speed) // get 가능
print(car.manufacturer) // get 가능
let bike = Bicycle()
bike.speed = 20.0 // set 가능
print(bike.speed) // get 가능
print(bike.manufacturer) // get 가능
// 프로토콜의 다중상속
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()
//오늘의 헤어스타일은 포마드스타일
//상의: 긴팔
//하의: 반바지'swift' 카테고리의 다른 글
| UILabel (0) | 2024.06.21 |
|---|---|
| 스위프트 UIKit (0) | 2024.06.21 |
| swift 접근 제한자 (0) | 2024.06.13 |
| Swift 프로퍼티 옵저버 (0) | 2024.06.12 |
| Swift 카카오 로그인 (1) | 2024.05.10 |