티스토리 뷰
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 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- PhotoKit
- ios
- photos
- 이분탐색
- Property wrapper
- 완전탐색
- Swift
- photoUI
- 구현
- 브루트포스 알고리즘
- 네부캠
- 챌린지
- 탐색
- 그리디
- Race Condition
- BFS
- 백준
- 다이나믹 프로그래밍
- 비동기
- 알고리즘
- 노드
- 실버
- GCD
- 회고
- 동시성
- 코딩테스트
- 코테
- dfs
- 재귀
- Combine
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함