-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Protocol #9
Comments
타입으로 class나 struct의 행동을 정의하는 역할 (즉, 구현하는 역할은 하지 않는다)
|
Protocol특정 메서드나 프로퍼티 및 기타 요구 사항을 추상화한 것을 의미한다.
정의 방법protocol Student {
var id: String { get }
var name: String { get set }
func study()
}
|
프로토콜 |
프로토콜의 정의특정 작업이나 기능에 적합한 메서드, 프로퍼티, 다른 요구사항 등의 청사진을 정의하는 것이 프로토콜. 프로토콜은 클래스, 구조체, 열거형 등에 채택이 될 수 있음. 어떤 타입이든 프로토콜의 요구사항을 만족하는 타입은, '프로토콜을 준수(conform to protocol)'한다고 한다. protocol DeeProtocol {
// 프로토콜 정의를 여기에 선언
} 프로토콜을 채택하기 위해선 커스텀 타입에 오른쪽에 콜론, 프로토콜 이름을 입력한다 struct SanStruct: DeeProtocol, CatProtocol {
// 구조체 정의
} 만약 클래스가 수퍼 클래스가 있을 경우, 프로토콜을 채택하기 전에 수퍼클래스를 먼저 작성해야한다. 프로토콜의 프로퍼티 요구사항저장 프로퍼티인지 계산프로퍼티인지는 명세하지 않는다. 필요한 타입과 이름만 지정. 또한 프로토콜은 각 프로퍼티가 gettable 한지, 또는 gettable and settable한지 반드시 지정해주어야 한다. protocol DeeProtocol {
var settableProperty: String { get set }
var gettableProperty: String { get }
static var typeProperty: String { get set }
} 프로토콜의 메서드 요구사항프로토콜에서 메서드는 중괄호(=메서드바디)를 포함하지 않는다. 가변 파라미터 허용되지만 메서드 파라미터의 초기값을 지정해줄 수 없다. protocol CatProtocol {
static func purrMethod()
func tasteCatFood() -> Int
mutating func isJipsaHome() -> Bool
} 프로토콜의 생성자(Initialiser) 요구사항생성자 바디 (= 중괄호)가 없는 것을 빼고는 일반적으로 생성자 함수를 정의하는 것과 동일하다. protocol JipsaProtocol {
init(catName: String)
} 타입으로서의 프로토콜프로토콜은 자기자신이 기능을 구현하지는 않지만, 프로토콜을 타입으로 사용할 수 있다. 다른 타입들 처럼 프로토콜을 여러곳에서 사용할 수 있다. 예를 들면
Class San {
let jipsa: JipsaProtocol
let favoriteFood: [String]
init(jipsa: JipsaProtocol, favouriteFood: [String]) {
self.jipsa = jipsa
self.favouriteFood = favouriteFood
}
func isMyFavorite(food: String) -> Bool {
return favoriteFood.contains(food)
}
} DelegationDelegation은 클래스와 구조체가 일부 책임을 다른 타입의 인스턴스에 이관(위임)하는 디자인 패턴. 이 디자인 패턴은 위임된 권한을 캡슐화한 프로토콜을 정의함으로써 구현하는데, 프로토콜을 준수하는 유형(Delegate=대리자)이 위임된 기능을 제공하도록 보장함. |
🗓️ 마감일
2023.01.15
💁 참여자
The text was updated successfully, but these errors were encountered: