Embrace Swift generics
Swift에서 Generic과 Protocol을 이용해서 코드를 추상화해보자!
소를 키우는 농장 시스템 구축
import UIKit
// 1) 건초를 먹는 소
struct Cow {
func eat(_ food: Hay) { }
}
// 2) 자라면 Alfalfa가 되는 건초
struct Hay {
static func grow() -> Alfalfa { return Alfalfa() }
}
// 3) 수확하면 건초가되는 Alfalfa
struct Alfalfa {
func harvest() -> Hay { return Hay() }
}
// 4) 농장에서는 소에게 음식을 준다.
struct Farm {
func feed(_ animal: Cow) {
let alfalfa = Hay.grow()
let hay = alfalfa.harvest()
animal.eat(hay)
}
}
다양한 동물을 키우는 농장 시스템 구축
보일러 플레이트(Boilerplate)
Identify Common Capabilities (공통 기능 식별하기)
다형성
다형성의 형태
Subtype polymorphism을 이용한 리팩토링
문제점
Type Parameter로 문제 해결해보기
Type parameter의 문제점
Build an interface
Protocol
정의했던 공통 기능
불투명 타입 (Opaque Type)
여러마리 동물에게 음식을 주는 함수 작성
Any 키워드
Last updated