야곰캠프 방학 중 TIL Notion -> Velog 이전하면서 복습하기
POP(Protocol Oriented Programming)
반드시 필요하지 않아도 되는 기능을 가질 수 있다
상위 클래스를 변경하면 하위 클래스가 의도치 않게 전부 변경된다.
다중 상속이 불가능하다
struct, enum의 경우 상속이 불가
프로토콜의 장점
상속을 이용한 클래스 중심의 프로그래밍은 참조 추적에 비용이 발생한다 -> 값 타입의 구조체를 적극적으로 이용 가능, 비용 절약
기능의 모듈화 => 클래스가 상속할 수 있어도 다중 상속을 지원하는 언어는 많지 않음
class, struct, enum 에 적용할 수 있기 때문에 확장 부분에서도 OOP에 비해 더 유연하다
수직 구조로 확장이 가능
extension을 통한 Protocol 구체화
protocol Camper {
func 야곰칭찬하기()
func 삽질하기()
}
extension Camper {
func 삽질하기() {
print("하나둘 하나둘")
}
}
class Person {}
class Dog {}
extension Person: Camper {
func 야곰칭찬하기() {
print("야곰 잘생겼네요")
}
}
let tak = Person()
tak.삽질하기() //하나둘 하나둘
extension Dog: Camper {
func 야곰칭찬하기() {
print("왈왈아아왕ㄹ!!")
}
func 삽질하기() {
print("깨개개객")
}
}
let 두치 = Dog()
두치.야곰칭찬하기() //왈왈아아왕ㄹ!!
두치.삽질하기() //깨개개객
스위프트의 표준 라이브러리의 기본 타입들은 구조체로 되어 있다.
Foundation Framework의 최상위 클래스는 NSObject이다.
NSObject는 Foundation Framework내의 클래스 객체들이 가져야하는 최소한의 기능을 가지고 있다
다중상속이 Swift에서는 불가하다 -> 프로토콜의 경우 컴포지션 프로토콜이 가능! (다중 상속 가능!)