[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