프로토콜(Protocol)
프로토콜이란
프로토콜 정의
프로토콜 채택
프로토콜 상속
프로토콜(Protocol)이란
자바,C#의 인터페이스같은 역할을 합니다
프로퍼티, 메서드들의 구현없이 선언들로만 구성되어 프로토콜을 채택하는 클래스에게 구현을 강제하는 역할을 합니다
구조체, 클래스, 열거형이 프로토콜을 채택할 수 있고 요구사항을 구현하게되면 프로토콜을 준수(conform)한다고 표현
protocol 프르토콜이름 {
프로토콜 정의
}
프로토콜 정의(Declare)
프로토콜을 정의하는 방법음 다음과 같습니다
protocol SomeProtocol{
var num1: Int {get}
static var num2: Int {get set}
func SomeFunc() -> String
}
|
cs |
프로퍼티는 두가지 종류로 선언 가능합니다
- 읽기전용 {get}
- 읽기쓰기 {get set}
여기서 get과 set은 getter와 setter를 의미합니다
프로퍼티의 {get set}은 쓰기가 가능해야하므로 let으로 선언이 불가능 합니다
{get set}은 읽기, 쓰기 모두 가능합니다
SomeFunc()메서드는 구현하지 않고 선언만 했습니다
아래에서 이 프로토콜을 채택해보겠습니다
프로토콜 채택(Adopt)
class myClass:SomeProtocol{
var num1: Int = 2
static var num2: Int = 3
func SomeFunc() -> String{
return "프로토콜 준수"
}
}
|
cs |
Someprotocol을 채택한 myClass를 만들었습니다
프로토콜의 채택은 클래스의 상속처럼 작성할 수 있습니다
만약 여러개의 프로토콜을 구현한다면 아래와 같이 작성할 수 있습니다
class myClass:Protocol_1, Protocol_2{
}
|
cs |
, 로 프로토콜을 구분시켜 줍니다
여기서 만약 상속까지 받는다면?
class myClass:SuperClass, Protocol, Protocol2{
}
|
cs |
상속받을 클래스를 맨 앞에 두어 프로토콜과 구분시킵니다
그렇다면 문제점이 하나 발생하는데 클래스를 상속 받는 것인지, 프로토콜을 채택한 것이지 구별이 가지 않습니다
해결법은 딱히 없지만 프로토콜의 이름을 통해 프로토콜임을 유추할 수 있습니다
프로토콜은 통상적으로 -able, -delegate 같은 이름을 많이 사용합니다
프로토콜의 상속(Inheritance)
프로토콜은 프로토콜을 상속받아 더많은 조건을 추가할 수 있습니다
protocol Runable{
func Run()
}
protocol Walkable{
func walk()
}
protocol Jumpable:Runable,Walkable{
func jump()
}
class Human:Jumpable {
func Run(){
print("뛴다")
}
func walk(){
print("걷는다")
}
func jump(){
print("점프")
}
}
|
cs |
Runable, walkable을 상속받은 Jumable을 채택하면 Runable, Walkable 또한 구현해야 합니다
추후 업데이트 - init, required, optional
참고자료
iOS프로그래밍기초(21-2학기)한성현교수님 강의 내용
'🍎iOS프로그래밍 > 오늘의 공부' 카테고리의 다른 글
Xcode 인터페이스 빌더의 연결관계(뷰-액션/아웃렛) (0) | 2021.11.12 |
---|---|
Xcode의 시작, 프로젝트 설정, 화면구성 (0) | 2021.11.07 |
Swift의 생성자 init()-Failable/Default/ Disignated/ iOS프로그래밍 (0) | 2021.10.02 |
Swift의 메서드 [Instance method, type/class method] / iOS프로그래밍 (0) | 2021.10.02 |
Swift의 프로퍼티 [Stored property, computed property] / iOS프로그래밍 (0) | 2021.10.01 |
댓글