일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 객체지향프로그래밍
- interface
- CleanCode
- Solid
- POP
- 함수형프로그래밍
- 의존성
- 디자인패턴
- DesignPattern
- 클린소프트웨어
- protocol
- 개발자
- OOP
- 이름
- IOS
- 개발
- 아이폰프로그래밍
- 부스트코스
- 협업
- iOS프로그래밍
- 고차함수
- 의도
- SWIFT
- 문법
- 네이밍
- 인터페이스
- 함수형패러다임
- Swfit
- fp
- 클린코드
- Today
- Total
밤에 쓴 코드
Swift) 프로토콜 - Protocol 본문
프로토콜
위키백과
- 통신 프로토콜은 컴퓨터나 원거리 통신 장비 사이에서 메시지를 주고 받는 양식과 **
규칙
의 체계이다.**
예시
swift
프로토콜은 규칙
을 표현한다는 점에서 비슷하지만 조금 다른 의미로 사용된다.
내가 좋아하는 yagom 은 명찰
,공고
를 통해 이야기를 해주었다.
프로토콜은 일종의 명찰이다 .
어떤 클래스(구조체)가 특정 프로토콜을 채택
하게되면
프로토콜이 요구하는 사항들을 준수
해야한다.
따라서 특정프로토콜을 구현한 클래스를 통해 생성된 오브젝트는 해당 프로토콜에서 요구되는 능력들을 수행할 수 있음을 신뢰할 수 있다.
struct Patient {
let helper : Any
}
let 부엉이 = String()
let 환자 = Patient(helper: 부엉이)
한 환자가 있습니다.
환자는 자신을 치료해줄 사람이 필요합니다.
위와 같이 Any
타입의 부엉이는 부적절합니다.
자신을 치료해줄 능력이 있는 객체를 원하고있으니까요.
protocol Healable{
var 착한마음씨 : String { get }
func heal()
}
이렇게 프로토콜로 하나의 책임을 만들었습니다.
치료를 하기위해선 착한마음씨를 가져야하고, 치료를 할수 있어야합니다.
struct Patient {
let helper : Healable
}
Patient
구조체를 그에 맞게 수정하겠습니다.helper
는 Healable
프로토콜을 준수하면 누구나 상관없습니다.
struct Nurse : Healable{
var 착한마음씨: String
func heal() {
print("주사로 치료합니다")
}
}
struct Doctor : Healable {
var 착한마음씨: String
func heal() {
print("수술로 치료합니다.")
}
}
struct Grandma: Healable {
var 착한마음씨: String
func heal(){
print("약손으로 치료합니다")
}
}
각각의 구조체들로 생성된 인스턴스들은
다른 방식으로 heal
동작을 수행하지만heal
이라는 동작은 모두 해야합니다.
그럼 환자는 위의 구조체로 생성된 어느 인스턴스라도 helper
로서의
자격이 있기에 치료받을수있겠네요.
소프트웨어에 객체들을 표현함에 있어서 , 사물이 있을 수 있고 , 사물이 할 수 있는 역할을 표현 할 경우도 있다.
특정 역할을 표현하고 , 그것에 만족하는 객체만 필요로 하는 경우가 있습니다. 또 유연하게 그 역할을 할수있으면 누구나 가능하게끔 유연하게 프로그래밍을 짜기위해서 프로토콜
은 아주 적잘한 선택일거 같습니다.
문법 팁
& 로 여러 프로토콜을 요구하는 변수를 선언할수있다
let 의사 : Healable & Careable
여러 프로토콜을 채택한 경우 프로토콜간의 변수의 타입이 다르면 충돌이 날 수 있습니다.
가이드 라인을 준수하여 , 명사로 표현 / 기능을 나타내는 프로토콜 -able,-ible,-ing 접미사 추가
protocol Healable { let 착한마음씨:String func heal() } protocol Careable{ let 착한마음씨:Int func heal()->(Any) } struct 의사 :Healable,Careable{ // 충돌 }
'Swift' 카테고리의 다른 글
Swift) POP - Protocol Oriented Programming (1) | 2019.04.25 |
---|---|
Swift) Extension - 익스텐션 (0) | 2019.04.25 |
Swift) 옵셔널 - Optional (0) | 2019.04.18 |
Swift) 구조체/변수/상수 (0) | 2019.04.08 |
Swift) 열거형 - Enumeration (0) | 2019.04.05 |