Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- protocol
- Solid
- 디자인패턴
- 함수형패러다임
- 객체지향프로그래밍
- interface
- 이름
- 네이밍
- 인터페이스
- IOS
- 클린소프트웨어
- 의도
- CleanCode
- 부스트코스
- DesignPattern
- 개발자
- 고차함수
- SWIFT
- fp
- 함수형프로그래밍
- OOP
- 클린코드
- 협업
- 의존성
- 아이폰프로그래밍
- iOS프로그래밍
- Swfit
- 문법
- POP
- 개발
Archives
- Today
- Total
밤에 쓴 코드
Swift) POP - Protocol Oriented Programming 본문
Swift) POP - Protocol Oriented Programming
- 상속의 한계
-
상속의 계층 구조가 깊어질수록 복잡도가 올라간다.
-
값 타입 (ex - struct)는 상속이 불가능
-
프로퍼티 추가 불가능
-
추상화된 클래스를 구체화했을 때 공통적인 책임을 가지는 여러 클래스가 존재할 수 있고, 중복된 코드를 야기한다.
-
*중복된 상황 - 억지로 만들어낸 예시 *
-
class Bird{ // 모든 새가 날수있는건 아니어서 동작 추가 불가능 } class Owl : Bird { func fly(){ print("훨~ 훨~") } // 비행한다 - 중복 } } class Pigeon : Bird { func fly(){ print("훨~ 훨~") } // 비행한다 - 중복 } } class Penguin : Bird{ }
-
-
프로토콜로 구현
-
protocol Flyable{ func fly() } extension Flyable{ func fly(){ print("훨~ 훨~") } } class Bird{ // 모든 새가 날수있는건 아니어서 동작 추가 불가능 } class Owl : Bird,Flyable{ } class Pigeon : Bird,Flyable{ } class Penguin : Bird{ }
-
-
-
------
- Default Implement
-
구현에 대해서 조금 더 구체적인 규격화된 기능을 구현하길 원하나, 상속은 적절하지 않을 때 ,
extension
을 통한 프로토콜의 메소드 기본 구현이 가능하다. -
프로토콜을 준수하는 클래스는 기본구현한 메소드에 대해서 재정의가 가능하고 재정의된 메소드가 우선순위를 가진다.
-
예시
-
protocol Runable{ func run() } extension Runable{ // Default Implement func run(){ print("슝") } } // 프로토콜을 체택한 클래스 정의 struct Tiger:Runable{ } struct Rabbit : Runable{ func run(){ print("깡총 깡총") } } let tiger = Tiger() let rabbit = Rabbit() tiger.run() // "슝" rabbit.run() // "깡총 깡총"
-
-
제정의가 우선순위인건 너무 좋았습니다.
extension Animal: Bird{
func description(){
print("새야!")
}
}
extension Animal: Bird Where Self:Flyable{
func description(){
print("나는 날수 있는 새야!")
}
}
위 두개의 차이가 있을까요.
둘다 Animal
이라는 클래스를 확장과 동시에 . Bird
라는 프로토콜을 구현하고 있습니다.
하지만 날수있는 새와 날수없는새가 존재하는거 같습니다.
위의 코드는 특정 프로토콜또는 클래스타입을 상속,구현 헀다면 확장을 하곘다는 코드로 둘은 다른 코드입니다.
이로써 좀더 다형성을 프로토콜로도 다채롭게 표현 가능해졌습니다.
'Swift' 카테고리의 다른 글
Swift) 사용자 정의 연산자 (0) | 2019.06.17 |
---|---|
Swift) Closure - 클로저 (0) | 2019.05.08 |
Swift) Extension - 익스텐션 (0) | 2019.04.25 |
Swift) 옵셔널 - Optional (0) | 2019.04.18 |
Swift) 프로토콜 - Protocol (0) | 2019.04.11 |
Comments