🔥 Extension 문법

247자
3분

Swift에서 extension을 선언하는 것은 아주 간단합니다. extension 키워드를 사용하여 다음과 같이 선언할 수 있죠:

extension SomeType {
    // SomeType에 추가할 새로운 기능들이 이곳에 들어갑니다.
}
swift

위의 코드에서 SomeType은 여러분이 확장하고자 하는 기존 타입의 이름입니다. 클래스, 구조체, 열거형, 프로토콜 타입 모두 확장이 가능하답니다. extension 내부에는 해당 타입에 추가하고 싶은 새로운 기능들을 구현하면 됩니다.

예를 들어, 다음과 같이 Int 타입을 확장하여 제곱을 계산하는 메서드를 추가할 수 있습니다:

extension Int {
    func squared() -> Int {
        return self * self
    }
}
 
let number = 5
print(number.squared()) // 25
swift

또한 extension을 사용하면 기존 타입이 하나 이상의 프로토콜을 채택하도록 만들 수도 있습니다. 프로토콜 준수성을 추가하려면 클래스나 구조체를 작성할 때와 동일한 방식으로 프로토콜 이름을 작성하면 됩니다:

extension SomeType: SomeProtocol, AnotherProtocol {
    // 프로토콜 요구사항의 구현이 이곳에 들어갑니다.
}
swift

이런 식으로 프로토콜 준수성을 추가하는 것은 Adding Protocol Conformance with an Extension에서 자세히 설명하고 있어요.

예를 들어, 다음과 같이 CustomStringConvertible 프로토콜을 채택하여 Point 구조체의 사용자 정의 문자열 표현을 제공할 수 있습니다:

struct Point {
    let x: Int
    let y: Int
}
 
extension Point: CustomStringConvertible {
    var description: String {
        return "(\(x), \(y))"
    }
}
 
let p = Point(x: 1, y: 2)
print(p) // (1, 2)
swift

extension은 Extending a Generic Type에서 설명한 대로 기존의 제네릭 타입을 확장하는 데에도 사용할 수 있습니다. 또한 Extensions with a Generic Where Clause에서 설명한 것처럼 제네릭 where 절을 사용하여 조건부로 기능을 추가할 수도 있죠.

이렇게 extension은 기존 타입의 기능을 확장하는데 매우 유용하게 사용됩니다. 코드의 모듈성과 재사용성을 높이는데 큰 도움이 되죠.