프로토콜이란 무엇인지 설명하시오.
Swift Protocol iOSInterviewquestions
특정 역할을 하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 청사진. 프로토콜은 정의를 하고 제시를 할 뿐이지 스스로 기능을 구현하지 않음
- 구조체, 클래스, 열거형은 프로토콜을 채택해서 특정 기능을 실행하기 위한 프로토콜의 요구사항을 실제로 구현할 수 있음
- 어떤 프로토콜의 요구사항을 모두 따르는 타입은 '해당 프로토콜을 준수한다'고 표현
protocol ProtocolName {
// define protocol
}
프로토콜의 프로퍼티 요구사항은 항상 var
키워드를 사용한 변수 프로퍼티로 정의
- 읽기와 쓰기가 모두 가능한 프로퍼티는
{ get set }
이라고 명시 - 읽기 전용 프로퍼티는
{ get }
이라고 명시
타입 프로퍼티를 요구하려면 static
키워드 사용
- 상속 가능한
class
타입 프로퍼티와 상속 불가능한static
타입 프로퍼티를 구분하지 않고static
키워드 사용
스터디
스탠포드 4강에서 프로토콜에 대해서 설명하니까 그걸 봐야겠다.
- 블라인드 커뮤니케이션에서 유용함 → Delegate 패턴
-
@objc
키워드를 붙이면 Objective-C의 프로토콜처럼 사용할 수 있음(프로토콜 내부의 메소드 구현이 선택적임)@objc
속성을 가진 프로토콜은 Objective-C 클래스를 상속받은 클래스에서만 채택 가능 - 구조체에 의해 구현되어서 값을 수정하는 함수가 있다면
mutating
키워드가 필요함 -
클래스만 받는 프로토콜을 표시하려면
class
키워드를 붙이면 됨protocol ClassProtocol: class { }
- swift 자체적으로 타입 추적
- & 를 이용해서 여러개 프로토콜을 묶어서 사용할 수 있음
- 매개변수 전달할 때 많이 사용한다고 함
- 권한을 주는데 유용함? →
Hashable
- initializer 구현할 때
required
표기해야 함 - 실패 가능한 이니셜라이저 →
init?()