[Swift] protocol과 extension
작성일: 2026. 2. 16.
태그:
객체의 shape만 정해주는 것의 한계
아래와 같은 Animal protocol을 만들고
protocol Animal {
var live: Bool { get set }
}
위와 같이 생성한 프로토콜을 채택하려는 객체들에 대해 생사 여부를 확인하는 메서드를 강제하려합니다.
protocol Animal {
var live: Bool { get set }
func liveOrDead() -> Bool
}
protocol을 채택한 객체에 공유되는 extension
만약 liveOrDead 메서드가 매번 구현되는 것이 귀찮을 경우 아래와 같은 방법이 존재합니다.
extension Animal {
func liveOrDead() -> Bool {
return self.live
}
}
이 때 Animal 프로토콜에서 선언해둔 메서드는 제거해도 됩니다.
protocol Animal {
var live: Bool { get set }
}
// Extension에서 기본 구현 제공
extension Animal {
func liveOrDead() -> Bool {
return self.live
}
}
// 채택한 객체들은 liveOrDead() 구현 안해도 됨
class Dog: Animal {
var live: Bool = true
}
class Cat: Animal {
var live: Bool = false
}
// 자동으로 사용 가능 ✅
let dog = Dog()
print(dog.liveOrDead()) // true
let cat = Cat()
print(cat.liveOrDead()) // false