티스토리 뷰
728x90
확장으로 프로토콜 준수 추가 (Adding Protocol Conformance with an Extension)
프로토콜에 extension을 하게되면 기존 타입을 확장할 수 있습니다.
예제를 보면서 이해하는게 더 빠를것 같습니다.
바로가시죠
Extension으로 기본값 지정하기
// 1
protocol Walkable {
}
// 2
protocol Portable {
func port()
}
// 3
extension Walkable {
func walk() {
print("걷습니다")
}
}
// 4
struct Human: Walkable, Portable {
func port() {
print("듭니다")
}
}
var human = Human()
human.walk() // 걷습니다
human.port() // 듭니다
1. Walkable 프로토콜에는 선언된게 없습니다.
2. Portable 프로토콜엔 func port() 가 선언되어 있어요.
3. Walkable 프로토콜에 extension을 해서 func walk() 를 구현해줌으로써 기본값이 지정됩니다.
4. Human 구조체에서 Walkable, Portable을 채택함으로써 아래 와 같은 결과가 나오게 됩니다.
지정된 기본값 재정의 하기
protocol Walkable {
}
protocol Portable {
func port()
}
extension Walkable {
func walk() {
print("걷습니다")
}
}
struct Human: Walkable, Portable {
func port() {
print("듭니다")
}
// 재정의
func walk() {
print("(재정의) 걸을수 있습니다")
}
}
var human = Human()
human.walk() // (재정의) 걸을수 있습니다
human.port() // 듭니다
extension Walkable에 이미 구현된 walk 부분을
구조체 Human에서 func walk() 부분을 재정의 하면 아래와 같은 결과가 나옵니다.
다중 프로토콜 채택
구조체의 경우는 상속의 개념이 없으므로
다중 프로토콜 채택으로 중복으로 코드를 작성하는 경우를 줄일 수 있습니다.
protocol Walkable {
func walk()
}
protocol Portable {
func port()
}
extension Walkable {
func walk() {
print("걷습니다")
}
}
extension Portable {
func port() {
print("듭니다")
}
}
struct Man: Walkable, Portable {
}
struct Woman: Walkable, Portable {
}
var man = Man()
man.walk()
man.port()
var woman = Woman()
woman.walk()
woman.port()
728x90
'iOS' 카테고리의 다른 글
[Swift] 메모리 안정성 (Memory Safety) (0) | 2022.08.25 |
---|---|
[Swift] MVVM - 데이터바인딩 databinding(with Observable) (0) | 2022.08.19 |
[Swift] Protocol - 타입 프로토콜, 위임 (0) | 2022.08.10 |
[iOS] Responder Chain, FirstResponder (0) | 2022.07.17 |
[Swift] ~= 연산자 (0) | 2022.07.13 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- RTCCameraVideoCapturer
- swift 고차함수
- 2023년 회고
- Swift joined
- Swift 프로그래머스
- ios
- Swift 프로퍼티
- RIBs tutorial
- Swift inout
- swift property
- 원티드 프리온보딩
- removeLast()
- Swift
- Swift Error Handling
- Swift ModernRIBs
- Swift 알고리즘
- swift programmers
- swift (programmers)
- Swift joined()
- Swift Leetcode
- iOS error
- Swift RIBs
- swift reduce
- CS 네트워크
- Class
- Combine: Asynchronous Programming with Swift
- swift protocol
- Swift 내림차순
- Swift init
- Swift final
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
글 보관함